ListView常用的优化技巧

来源:互联网 发布:linux sleep函数单位 编辑:程序博客网 时间:2024/05/16 04:42

ListView作为最常用的显示效果之一,基本用法相信大家已经了解,
下面我们重新学习一下ListView的技巧:
1.1,使用ViewHolder模式提高效率
ViewHolder模式是提高ListView效率的一很重要的方法。ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在调用getView()的时候都去通过findViewById()实例化空间。据测试,使用ViewHolder将提高50%以上的效率。使用ViewHolder模式来优化ListView非常简单,只需要在自定义Adapter中定义一个内部类ViewHolder,并将布局中的控件作为成员变量,代码如下所示:

public View getView(int pos, View convertView, ViewGroup parent){     ViewHolder holder;    //判断是否缓存    if (convertView == null) {     //通过layoutInflater实例化布局        convertView = mInflater.inflate(R.layout.list_item, null);         holder.text = (TextView) convertView.findViewById( R.id.text));        holder.icon = (ImageView) convertView.findViewButId( R.id.icon));        convertView.setTag(holder);     }else {     //通过tag找到缓存的布局            holder = (ViewHolder) convertView.getTag();           }           holder.text.setText(DATA[pos]);            holder.icon.setImageBitmap((pos & 1) == 1 ? mIcon1 : mIcon2);           return convertView;                }  //创建一个内部类ViewHolder,final,static修饰词,然并卵。    class ViewHolder {             TextView text;            ImageView icon;    } 

1.2,设置项目间分隔线

    android:divider="@color/divider_color"      android:dividerHeight="1px" 

把分割线设置成透明;

android:divider="@color/divider_color"  

1.3,隐藏ListView的滚动条

android:scrollbars="none"

1.4,取消ListView的Item点击效果
当点击ListView中的一项是,系统默认会出现一个点击效果,在android5.X以上是一个波纹效果,而在Android5.X一下的版本则是一个改变背景颜色的效果,当可以通过修改listSelector属性来取消掉点击后的回馈效果,代码如下:

android:listSelector="#00000000"

1.5,设置ListView需要显示在第几项

listView.setSelection(N);

其中N就是需要显示的第N个Item。
当然,这个方法类似scrollTo,是瞬间完成的移动。除此之外,还可以使用如下代码来实现平滑移动。

mListView.smoothScrollBy(distance,duration);mListView.smoothScrollByOffset(offset);mListView.smoothScrollToPosition(index);

1.6,动态修改ListView
当然这里的mData必须和传进去的是同一个。

mData.add("new:);mAdapter.notifyDataSetChanged();

1.7,遍历ListView中的所有Item
ListView作为一个ViewGroup,为我们提供了操纵子View的各种方法,最常用的就是通过getChildAt()来获取第i个子View,代码如下所示。

for(int i =0;i<mListView.getChildCount();i++){    View view = mListView.getChildAt(i);}

1.8,处理空ListView
我们在使用ListView展示数据时,如何需要展示的数据集为空,那么ListView不会显示任何数据或提示,按照完善这一用户体验的需求,ListView提供了一个方法setEmptyView,当数据集为空时,就显示设置的这个界面。

<LinearLayoutandroid:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/layoutTitlebar"><ListViewandroid:id="@+id/listViewFriends"android:layout_height="match_parent"android:layout_width="match_parent"android:background="@color/friendBGColor"android:cacheColorHint="#00000000"></ListView><ImageViewandroid:id="@+id/empty_image"android:text="@string/strNoRecordsFound"android:layout_width="fill_parent"android:layout_height="fill_parent"android:src="@drawable/empty"android:gravity="center"></ImageView></LinearLayout>

在代码中,我们通过以下方式给ListView设置空数据时要显示的布局,代码如下所示。
ListView listView = (ListView)findViewById(R.id.listview);
listView.setEmptyView(findViewById(R.id.empty_image));

0 0
原创粉丝点击