在安卓项目中会很频繁地用到ListView,正好也看到过一些文章和书中关于ListView的优化和使用,特别进行一下整理和总结,希望进行分享和交流。
1.处理空列表
对于如何处理空列表,在某本书上看到了比较简单的处理方式,代码如下
xml部分内容
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listView"
/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/imageView"
android:src="@color/button_material_light" />
</FrameLayout>
代码部分
ListView mListView=(ListView)findViewById(R.id.listView);
mListView.setEmptyView(findViewById(R.id.imageView));
2.通过ViewHolder优化适配器
class listAdapter extends BaseAdapter{
static class ViewHolder{ // 自定义ViewHolder 可以根据自己的列表item 定制
// ViewHolder是一个静态类,可以用于保存每行的视图以避免每次调用getView()时都会调用findViewById()
public ImageView imageView;
public TextView text;
}
private LayoutInflater mInflater;
Context context;
public listAdapter(Context context){
mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context=context;
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int id) {
// TODO Auto-generated method stub
return id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView==null){
convertView=mInflater.inflate(R.layout.mylistitem,parent,false); //mylistitem 为自定义的item的xml配置文档
viewHolder=new ViewHolder();
viewHolder.imageView=(ImageView)convertView.findViewById(R.id.item_image);
viewHolder.text=(TextView)convertView.findViewById(R.id.item_text);
convertView.setTag(viewHolder);
}else {
viewHolder=(ViewHolder)convertView.getTag();
}
//这里可以通过获取position参数加载相应的数据和填充视图
return convertView;
}
}