android开发最常用例子整理----(3)自定义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

四、效果截图

时间: 2024-08-25 01:38:21

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

android开发最常用例子整理----(1)自定义按钮实现

android开发最常用例子整理----(1)自定义按钮实现 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

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

android开发最常用例子整理----(2)自定义ListView(SimpleAdapter实现) 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

Android开发之常用的时间格式

/** * 获取现在时间 * * @return 返回时间类型 yyyy-MM-dd HH:mm:ss */ public static Date getNowDate() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = formatter.format(currentTime);

Android开发笔记(一百一十八)自定义悬浮窗

WindowManager 在前面<Android开发笔记(六十六)自定义对话框>中,我们提到每个页面都是一个Window窗口,许多的Window对象需要一个管家来打理,这个管家我们称之为WindowManager窗口管理.在手机屏幕上新增或删除页面窗口,都可以归结为WindowManager的操作,下面是该管理类的常用方法说明: getDefaultDisplay : 获取默认的显示屏信息.通常用该方法获取屏幕分辨率,详情参见<Android开发笔记(三)屏幕分辨率>. addV

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

Android开发之常用开源库直接拿来用

1.from  代码家 整理比较好的源码连接 *************************************************************************************************************************************************************************** http://blog.zhan-dui.com/?page_id=60 感谢 "代码家"整理 一.

Android开发中常用的工具类整理

来源 http://wujingchao.net/2015/03/16/android_common_utility_class.html 日志 package net.wujingchao.android.utility import android.util.Log; public final class L { private final static int LEVEL = 5; private final static String DEFAULT_TAG = "L"; pr

Android开发-基本概念小整理(四)为了面试的小伙伴们所准备~~

转载请注明出处:http://blog.csdn.net/iwanghang/ 我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~http://blog.csdn.net/vote/candidate.html?username=iwanghang请为我投票,谢谢 ~~如果没有CSDN账号 直接使用微信/QQ/微博登陆 就能投票了~~ 整理这些概念的期间,强迫自己大量阅读了别人的博客,是一个难得的过程.虽然,一些内容,很难在专业.浅显易懂与篇幅 这三者上做取舍,但是,我觉得这样四篇

android开发中常用的快捷键

Eclipse快捷键-方便查找,呵呵,记性不好 行注释/销注释 Ctrl+/  块注释/销注释/XML注释 Ctrl+Shift+/   Ctrl+Shift+\查找 查找替换 Ctrl+H  Ctrl+F查找下一个/往回找 Ctrl+K   Ctrl+Shift+K跳到某行 Ctrl+L,哈用惯了Editplus,不时会敲下Ctrl+G,查找当前元素的声明 Ctrl+G查找当前元素的所有引用 Ctrl+Shift+G重新组织Import Ctrl+Shift+O,能帮你一次去掉所有未使用的Im