当前位置: 代码迷 >> Android >> android开发最常用事例整理-(3)自定义ListView(自定义BaseAdapter实现)
  详细解决方案

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

热度:91   发布时间:2016-04-28 02:40:31.0
android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

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

一、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


四、效果截图




  相关解决方案