listview 带不同颜色的title

57 篇文章 0 订阅
17 篇文章 0 订阅

项目背景:希望listview带title,每个title有背景颜色,并且每个content内容奇数条背景为灰色,偶数条为白色背景

设计图:

第一步:做出一个listview 并获取条目,设置不同颜色:

layout:main.xml  activity的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="#ffffff">
 <RelativeLayout
        android:id="@+id/RL_apperror"
        android:layout_width="match_parent"
        android:layout_height="50dp" >

        <TextView
            android:id="@+id/TV_apperror_back"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:gravity="center"
            android:paddingLeft="15dp"
            android:text="后退" />

        <TextView
            android:id="@+id/TV_error"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:text="错误" />
    </RelativeLayout>

        <ListView
            android:id="@+id/LV_error"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>

</LinearLayout>

layout: list_item_section.xml   title的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#cbcbcb"
    android:orientation="vertical" >
   
<TextView    
    android:id="@+id/list_item_section_text"   
    android:layout_width="fill_parent"     
    android:layout_height="wrap_content"    
    android:paddingTop="2dp"    
    android:paddingBottom="2dp"    
    android:paddingLeft="15dp" 
    android:background="#e6e6e6"   
    style="?android:attr/listSeparatorTextViewStyle" />  
</LinearLayout>

layout: list_item_enty.xml  条目布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingRight="?android:attr/scrollbarSize" 
    android:background="#ffffff">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="6dip"
        android:layout_weight="1" >

        <TextView
            android:id="@+id/list_item_entry_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="marquee"
            android:fadingEdge="horizontal"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/list_item_entry_summary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/list_item_entry_title"
            android:layout_below="@id/list_item_entry_title"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="?android:attr/textColorSecondary" />
         <TextView
            android:id="@+id/list_item_entry_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/list_item_entry_title"
            android:layout_below="@id/list_item_entry_summary"
            android:singleLine="true"
            android:textAppearance="?android:attr/textAppearanceSmall"
            android:textColor="?android:attr/textColorSecondary" />
    </RelativeLayout>

</LinearLayout>
Item.java   判断是否是title

package listview;

/**
 * @author Administrator
 *
 */

public interface Item {
 
public boolean isSection();

}

SectionItem.java 是title

/**
 * 
 */
package listview;

/**
 * @author Administrator
 *
 */
public class SectionItem implements Item{
	 
	 private final String title;
	  
	 public SectionItem(String title) {
	  this.title = title;
	 }
	  
	 public String getTitle(){
	  return title;
	 }
	  
	 @Override
	 public boolean isSection() {
	  return true;
	 }
	 
	}
EntryItem.java  不是title
package listview;

/**
 * @author Administrator
 *
 */

public class EntryItem implements Item{

public final String title;
public final String subtitle;
public final String time;

public EntryItem(String title, String subtitle,String time) {
 this.title = title;
 this.subtitle = subtitle;
 this.time=time;
}
 
@Override
public boolean isSection() {
 return false;
}

}

EntryAdapter.java  适配器

/**
 * 
 */
package listview;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.example.meituandemo.R;

/**
 * @author Administrator
 * 
 */
public class EntryAdapter extends ArrayAdapter<Item> {

	private Context context;
	private ArrayList<Item> items;
	private LayoutInflater mInflater;
	private int tag = 0;

	public EntryAdapter(Context context, ArrayList<Item> items) {
		super(context, 0, items);
		this.context = context;
		this.items = items;
		mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	public int getSelectionByPosition(int position) {
		int selection = 0;
		for (int i = 0; i < position; i++) {
			Item item = items.get(i);
			if (item.isSection()) {
				selection = i;
			}
		}
		return selection;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View v = convertView;
		ViewHolder holder=new ViewHolder();
		final Item i = items.get(position);
		if (i != null) {
			if (i.isSection()) {
				SectionItem si = (SectionItem) i;
				v = mInflater.inflate(R.layout.list_item_section, null);

				v.setOnClickListener(null);
				v.setOnLongClickListener(null);
				v.setLongClickable(false);
                
				holder.sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
				holder.sectionView.setText(si.getTitle());

			} else {
				EntryItem ei = (EntryItem) i;
				v = mInflater.inflate(R.layout.list_item_enty, null);
				holder.title = (TextView) v.findViewById(R.id.list_item_entry_title);
				holder.subtitle = (TextView) v.findViewById(R.id.list_item_entry_summary);
				holder.time= (TextView) v.findViewById(R.id.list_item_entry_time);
				if (holder.title != null)
					holder.title.setText(ei.title);
				if (holder.subtitle != null)
					holder.subtitle.setText(ei.subtitle);
				if(holder.time!=null)
					holder.time.setText(ei.time);
				int selection = getSelectionByPosition(position);
				if ((position - selection) % 2 == 0) {// 偶数行
					holder.title.setTextColor(Color.RED);
				} else {
					holder.title.setTextColor(Color.GREEN);
				}
			}
		}
		return v;
	}

	/**
     * 视图优化
     */
	static class ViewHolder {
		TextView sectionView;
		TextView title;
		TextView subtitle;
		TextView time;
	}
}
SectionListExampleActivity.java 主函数
/**
 * 
 */
package listview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

import com.example.meituandemo.R;

/**
 * @author Administrator
 *
 */
public class SectionListExampleActivity extends Activity implements OnItemClickListener{
	  
	  ArrayList<Item> items = new ArrayList<Item>();
	  ListView listview=null;
	   
	    @Override
	    public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.main);
	        listview=(ListView)findViewById(R.id.LV_error);
	        
	        items.add(new SectionItem("My Friends"));
	        items.add(new EntryItem("Abhi Tripathi", "Champpu","2014/9/28"));
	        items.add(new EntryItem("Sandeep Pal", "Sandy kaliya","2014/9/22"));
	        items.add(new EntryItem("Amit Verma", "Budhiya","2014/9/20"));
	        items.add(new EntryItem("Awadhesh Diwaker ", "Dadda","2014/9/20"));
	                
	        items.add(new SectionItem("Android Version"));
	        items.add(new EntryItem("Jelly Bean", "android 4.2","2014/9/20"));
	        items.add(new EntryItem("IceCream Sandwich", "android 4.0","2014/9/20"));
	        items.add(new EntryItem("Honey Comb", "android 3.0","2014/9/20"));
	        items.add(new EntryItem("Ginger Bread ", "android 2.2","2014/9/20"));
	         
	        items.add(new SectionItem("Android Phones"));
	        items.add(new EntryItem("Samsung", "Gallexy","2014/9/20"));
	        items.add(new EntryItem("Sony Ericson", "Xperia","2014/9/20"));
	        items.add(new EntryItem("Nokiya", "Lumia","2014/9/20"));
	         
	        EntryAdapter adapter = new EntryAdapter(this, items);
	        listview.setAdapter(adapter);
	        listview.setOnItemClickListener(this);
	    }
	     
	 
	 @Override
	 public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) {
	   
	  EntryItem item = (EntryItem)items.get(position);
	  Toast.makeText(this, "You clicked " + item.title , Toast.LENGTH_SHORT).show();
	 }
	 
	 private void setBackGround(){
	 }
	}



然后进行改进:

title是分为:今天,更早的,那么从接口获取的数据如何判断是今天的还是属于更早的,判断出来后有如何只让item加一次title?

假设从接口取得json存在变量successString ,则:

private void getData() {

//AppErrorBean 用于存json字符串,分类
Gson gson = new Gson();
List<AppErrorBean> appErrorBean = gson.fromJson(successString, new TypeToken<List<AppErrorBean>>() {
}.getType());
if (!appErrorBean.isEmpty()) {
boolean todayFlag=false;
boolean laterFlag=false;

for (int i = 0; i < appErrorBean.size(); i++) {
AppErrorBean b = appErrorBean.get(i);
if (isToday(b.getStartTime())) {
laterFlag = false;
if (!todayFlag) {
todayFlag = true;
items.add(new SectionItem("今天"));
}
}else {
todayFlag = false;
if (!laterFlag) {
laterFlag = true;
items.add(new SectionItem("更早"));
}
}
items.add(new EntryItem(applicationName, appErrorBean.get(i).getExceptionClass(), appErrorBean.get(
i).getMessage(), appErrorBean.get(i).getStartTime()));
adapter.notifyDataSetChanged();


}
}
}

public boolean isToday(String time) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		String nowTime = sdf.format(new Date());
		if(time.contains(nowTime)){
			return true;
		}else{
			return false;
		}
	}

这样基本完成需求,根据设计更改一下背景颜色之类的,已无难点。


参考文献:http://sunil-android.blogspot.com/2013/08/section-header-listview-in-android.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值