博客出自: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);
今天先说到这里!谢谢!