ListView常用的优化技巧

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,当数据集为空时,就显示设置的这个界面。

<LinearLayout
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/layoutTitlebar">

<ListView
android:id="@+id/listViewFriends"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@color/friendBGColor"
android:cacheColorHint="#00000000">
</ListView>

<ImageView
android: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));

你可能感兴趣的:(优化,ListView,缓存机制)