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