listview实现漂亮的自定义表格实例
listview实现漂亮的自定义表格实例
篇一:Android学习笔记二十四之ListView列表视图二
Android学习笔记二十四之ListView列
表视图二
前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题。
ListView优化方法一
在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次。getView()方法每次调用的时候都会重新inflate一个View出来返回去,但是对于ListView,只需要保留能够显示的最大的View的数目即可,而新的View可以复用消失的View。ListView给我们提供了可复用的View对象,在getView()方法里面,有一个参数View,这个就是可以复用的View对象。当参数View为null的时候,我们需要inflate一个View,当它不为null的时候,我们可以直接将他返回。例如:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
//view为空的时候,inflate一个新的view
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_base_adapter, null);viewHolder = new ViewHolder();
viewHolder.tv_base_adapter = (TextView) view.findViewById(R.id.tv_base_adapter);view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.tv_base_adapter.setText(datas[i]);
//不为空,复用view
return view;
}
ListView优化方法二
上面介绍的是对View复用的优化,这样我们可以不必每一item都inflate一个新的view,可以通过复用,减小内存开销。下面我们介绍一个每一个AndroidAPP中都必不可少的操作,获取控件句柄,简单的说就是拿到id。在ListView中,我们inflate一个View,里面也有需要获取到组件id的,我们可以用ViewHolder来实现优化:
具体的思路就是,我们在ViewHolder中存放我们需要的控件,在View为null的时候,需要inflate一个新的view,同时我们还new一个ViewHolder类的对象,并将findviewById的结果赋值给ViewHolder中对应的成员变量,我们可以调用View中setTag()方法,将
ViewHolder和View绑定起来。当view不为null的时候,通过getTag()方法取出ViewHolder对象,这样就可以获得ViewHolder中的成员变量,也不再需要调用findViewById方法了。例如:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_base_adapter, null);//view为空,new一个ViewHolder对象
viewHolder = new ViewHolder();
//获取到ViewHolder对象中成员变量的id
viewHolder.tv_base_adapter = (TextView) view.findViewById(R.id.tv_base_adapter);//调用setTag方法,将ViewHolder绑定到中
view.setTag(viewHolder);
} else {
//view不为空,调用getTag方法,取出保存的ViewHolder对象
viewHolder = (ViewHolder) view.getTag