一:ListView常用优化技巧
1.使用ViewHolder模式提高效率:充分利用了视图缓存机制,避免每次都调用getview()的时候去findViewById实例化控件。在adapter中定义一个ViewHolder即可
2.设置子item间分割性:在XML中 android:dividerHeight="10dp"
android:divider=“@android:color/darker_gray” //设置成@null时为透明
3.隐藏滚动条:android:scrollbars=“none”
4.取消listview的item点击效果:android:listSelector="#000000"
5.设置listview需要显示在第几项: lstview.setSelection(N) N就是需要现实的第N个Item这个方法类似乳scrollTo是瞬间完成移动的,除此之外,还可以使用 listview.smoothScrollBy(distance,duration)
listview.smoothScrollByOffset(offset)
listview.smoothScrollToPosition(index)来实现平滑移动
6.动态修改listview 修改listview的数据源调用listview的adapter.notifyDateSetChanged()
7.遍历所有的item
for(int i=0;i<listView.getChildCount();i++){
View view = listView.getChildAt(i)
}
8.处理空的listview:listview设置了setEmptyView(R.id.empty_view)的方法,当填充listview的数据源为空时,就会显示empty_view。这个布局就写在与listview布局同级的activity布局中。这个activity用framelayout布局就行。
9.listview滑动监听:
onTouchListener 是view中的监听事件 :通过监听ACTION_DOWN, ACTION_MOVE ,ACTION_UP,这三个事件发生时的坐标,就可以判断用户滑动的方向,并在不同的事件中进行相应的逻辑处理。
onScollListener 是AbsListView的监听事件:可以监听listview的滚动状态。可以判断是否滚动到最后一行,判断上滑还是下滑。
二 listview的常用扩展
不同种类的item布局,在listview的adapter中
@Override public View getView(int i, View view, ViewGroup viewGroup) { if (view != null){ if (getItemViewType(i) == 0){ // 给viewholder填充一种布局 }else { // 给viewholder填充另外一种布局 } } return view; } @Override public int getItemViewType(int position) { // 这里返回数据源中的item类型 return dataList.get(position).getType(); } @Override public int getViewTypeCount() { // 这里返回数据源中不同item类型的种类 return 2; }