Android初级开发第八讲ListView学习以及特性介绍


博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !


一般,安卓程序中要实现列表数据会用到ListView和GridView,相似度很高,今天主要拿前者来讲述。

咱们先看代码

private List<Object> data;
	private Context context;
	private ListView listview;
	private MyAdapter adapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);// 布局文件
		// 初始化listview data等变量
		adapter = new MyAdapter();
		listview.setAdapter(adapter);
		listview.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				Object obj=data.get(arg2);
			}
		});
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		adapter.notifyDataSetChanged();
	}

	class MyAdapter extends BaseAdapter {
		class ViewHolder {
			private TextView t1, t2, t3, t4;
		}

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

		@Override
		public Object getItem(int position) {
			return position;
		}

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

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			if (convertView == null) {
				convertView = LayoutInflater.from(context).inflate(
						R.layout.listitem, null);
				holder = new ViewHolder();
				// 初始化holder.t1,t2,t3,t4
				convertView.setTag(holder);
			}
			// 给holder.t1,t2,t3,t4赋值
			return convertView;
		}
	}

首先,ListView对象在xml文件中声明,并在onCreate方法中初始化获得listview,给listview加载数据

有这么几点大家会注意到:

1、adapter我写了一个内部类,继承自BaseAdapter,这样的好处在于data数据不用再传递,在刷新页面时直接用adapter.notifyDataSetChanged()方法就可以刷新界面,减少重新声明adapter的次数,减少内在消耗。
2、在适配器的getView方法中,我没有重新声明一个View,而是用的convertView,这样的好处是当加载的数据过多,如一万条时仍然不会卡。

3、使用自定义的一个ViewHolder,好处在于不用每次都给t1,t2,t3,t4初始化,减少内存消耗。

4、最常用setOnItemClickListener,注意arg2表示数据的下坐标,传递的对象要序列化(下节讲述)

使用listview差不多就需要注意到这么多。


另外listview有一些特性

比如

1、让listview下面那条横线消失呢:只需要加上这一句,listView.setDividerHeight(0);

2、如何让listview进入就显示最后几条(默认最前)呢?可以设置属性android:stackFromBottom="true"

3、隐藏listView的滚动条, android:scrollbars="none"

4、自动滚动,同时设置android:stackFromBottom="true" android:transcriptMode="alwaysScroll" 

5、实现一个单/复选框效果,  listView.setItemsCanFocus(false);  listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);/  listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);


今天先说到这里!谢谢!

原文地址:https://www.cnblogs.com/fengju/p/6174506.html