您的位置:首页 > 移动开发 > Android开发

Android ListView 控件总结

2016-02-03 11:48 381 查看
1,使用ViewHolder 模式来提高ListView效率,避免每次getView()时都调用findViewById()方法

private class Adapter  extends BaseAdapter{

......

public final class ViewHolder{

           public TextView tv_name;

......

}

}

2,屏蔽ListView的item点击效果

android:listSelector="#000000" 或者android 自带的系统透明色android:listSelector="@android:color/transparent"

3,设置LIstView需要显示在第几项

这个方法是瞬间移动:listView.setSelection(position)

平滑移动: listView.smoothScrollBy(distance,duration); listView.smoothScrollByOffset(offset);listView.smoothScrollToPosition(index)

4,动态修改ListView的数据

mlistViewdata.add("add");

mAdapter.notifyDataSetChanged();

5,处理空ListView

当ListView没有数据加载出来时,可以显示一个默认的图片

listView.setEmptyView(findViewById(R.id.empty_view));

6,ListView 滑动监听

滑动监听有两种方法,OnTouchListener和OnScrollListener这两种方法监听。

6.1 OnTouchListener

lv_list.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 触摸时操作
break;

case MotionEvent.ACTION_UP:
// 离开时操作
break;

case MotionEvent.ACTION_MOVE:
// 移动时操作
break;

default:
break;
}
return false;
}
})

6.2 OnScrollListener

lv_list.setOnScrollListener(new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_IDLE:
// 滑动停止
break;

case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
// 正在滚动
break;

case OnScrollListener.SCROLL_STATE_FLING:
// listView 由于惯性继续滑动
break;

default:
break;
}
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
// 滚动时一直在调用
// firstVisibleItem 当前能看到的第一个item id
// visibleItemCount 当前能看到的Item 总数
// totalItemCount 整个ListView的item 总数
if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
// 滚动到最后一行
}
// 可以通过代码来判断滚动的方向
if (firstVisibleItem > lastVisibleItemPosition) {
// 上滑
} else if (firstVisibleItem < lastVisibleItemPosition) {
// 下滑
}

lastVisibleItemPosition = firstVisibleItem;

}
});
7,聊天式的ListView

聊天界面会显示两种布局,在定义BaseAdapter时已经考虑到了只要重写两种方法即可

@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
// 返回第position个item的id
return 0;
}

@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
// 返回不同布局的总数
return super.getViewTypeCount();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

ViewHolder holder = null;
if (convertView == null) {

//在这里判断显示哪一种布局
if (getItemViewType(position) == 0) {
mInflater = getLayoutInflater();
convertView = mInflater.inflate(R.layout.industry_look_list_item, null);
holder = new ViewHolder();
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
} else {

}

convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
}

holder.tv_name.setText(listTops.get(position));
return convertView;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 手机 listview