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;
}
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;
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析