码迷,mamicode.com
首页 > 移动开发 > 详细

android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

时间:2015-01-22 21:54:37      阅读:314      评论:0      收藏:0      [点我收藏+]

标签:android   listview   baseadapter   

        在上一个教程中,我们使用SimpleAdapter实现自定义ListView,但是有一点不方便的是,如果要对每一个ListView的item选项进行不同的样式设置,就很麻烦,因为SimpleAdapter使用的是统一的风格样式。如果要实现不同item使用不同的风格样式,那么就要通过集成BaseAdapter来实现。

一、Activity

MainActivity.java源码:

技术分享

public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//Step1
		String[] contentArray = new String[]{"内容1","内容2","内容3","内容4","内容5"};
		ListView lv = (ListView)findViewById(R.id.lv);
		
		//Step2
		ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
		for(int i=0; i<contentArray.length; i++){
			HashMap<String,Object> map = new HashMap<String,Object>();
			map.put("startTimeText", "22:00");
            map.put("endTimeText", "23:00");
            map.put("separator", R.drawable.separator1);
            map.put("content", contentArray[i]);
            data.add(map);
		}
		
		//Step3
		MyAdapter adapter = new MyAdapter(MainActivity.this,data);
		
		//Step4
		lv.setAdapter(adapter);
	}
	
	class MyAdapter extends BaseAdapter{
		private Context mContext;
		private List<HashMap<String,Object>>dataList;
		private int[] imageArray = {R.drawable.separator1,
									R.drawable.separator2,
									R.drawable.separator3,
									R.drawable.separator4,
									R.drawable.separator5};
		
		public MyAdapter(Context context, List<HashMap<String,Object>>dataList) {
			this.mContext = context;  
	        this.dataList = dataList;
		}

		@Override
		public int getCount() {
			return dataList.size();
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			//要想对不同的item选项进行设置,就要重写getView方法来实现
			ViewHolder holder = null;
 			if(convertView == null){
				holder = new ViewHolder();
				convertView = LayoutInflater.from(mContext).inflate(
						R.layout.list_item, null);
				holder.separatorImage = (ImageView)convertView.findViewById(R.id.separator);
				holder.content = (TextView)convertView.findViewById(R.id.content);
				holder.startTimeText = (TextView)convertView.findViewById(R.id.startTimeText);
				holder.endTimeText = (TextView)convertView.findViewById(R.id.endTimeText);
				convertView.setTag(holder);
			}else{
				holder = (ViewHolder)convertView.getTag();
			}
 			//给listview下不同item选项设置不同的图片样式
 			holder.separatorImage.setImageResource(imageArray[position]);
			holder.content.setText((String)getItem(position).get("content"));
			holder.startTimeText.setText((String)getItem(position).get("startTimeText"));
			holder.endTimeText.setText((String)getItem(position).get("endTimeText"));
			
			return convertView;
		}
		

		@Override
		public HashMap<String, Object> getItem(int position) {
			return dataList.get(position);
			
		}
		
		final class ViewHolder{
			ImageView separatorImage;
			TextView startTimeText;
			TextView endTimeText;
			TextView content;
		}
		
	}
}

二、xml布局文件

技术分享
(1)MainActivity主界面的布局源码activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

</LinearLayout>
(2)ListView列表单元的布局源码list_item.xml:
<?xml version="1.0" encoding="utf-8" ?>
 <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="match_parent" 
	android:layout_width="match_parent"
	android:gravity="center_vertical"
	android:orientation="horizontal"> 
	
      <LinearLayout 
        android:layout_width="0dp"
        android:layout_height="wrap_content"
		android:layout_weight="2"
		android:gravity="center_vertical"
		android:orientation="vertical">
          <TextView
              android:id="@+id/startTimeText"
              android:layout_height="wrap_content"
			  android:layout_width="match_parent"/>
          <TextView
              android:id="@+id/endTimeText"
              android:layout_height="wrap_content"
			  android:layout_width="match_parent"/>
      </LinearLayout>
      
	<ImageView 
	    android:id="@+id/separator"
	    android:layout_weight="1"
 	    android:layout_width="0dp"
		android:layout_height="wrap_content" 
		/> 

	 <TextView
	    android:id="@+id/content" 
 	    android:layout_width="0dp"
	    android:layout_height="wrap_content" 
		android:layout_weight="12"/> 
</LinearLayout>

三、相关资源

res/drawable-mdpi/下的文件:

技术分享

技术分享 separator1.png   技术分享separator2.png    技术分享separator3.png     技术分享separator4.png     技术分享separator5.png


四、效果截图


技术分享

android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

标签:android   listview   baseadapter   

原文地址:http://blog.csdn.net/wen294299195/article/details/43026267

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!