ListView的归纳与总结
2016-07-01 23:46
211 查看
ListView,是每一个android程序员都应该和必须掌握的,也是使用频率最高的,不废话,直接正题...
常用adapter适配器:
1.ArrayAdapter(context,布局文件,控件ID,以维数组名) :只能实现内容单一的下滑显示
2.SimpleAdapter(context,集合,布局文件,String [ ] 建,int [ ] 控件id):显示的数据是多条键值对
例:List<Map<String,Object>>list=new HashMap<Map<String,Object>>();
d 创建每一个MAP对象,添加进list集合
map的键不会显示在屏幕上,值做选定数据用
3.BaseAdapter:使用频率最高的,直接添加类中的数据
回调: getCount()//设置总条目数据
getItem(int position)//返回条目对象
getItemId(int position)//返回条目对应ID
getView(int position,View converView,ViewGroup parent) //将条目转换成view对象,找条目对应的组件,设置每个条目数据
常用属性:
divider:在listView控件中添加分隔线,可以是图片或颜色线条
dividerHeight:分割线高度
listSelector:点击单个item时的显示效果,图片或颜色
ListView代码中
Adapter.notify():刷新当前ListView的数据
遍历ListView
ListView.getChildCount():获得当前ListView的所有Item
View view=ListView.getChildAt(int):返回一个View类型的item
优化adapter:
据说,经测试,利用ViewHolder将有效提高50%以上的效率
监听
OnTouchListener:监听DOWN,MOVE,UP事件发生时的坐标
OnScrollListener:在ListView滚动时,一直回调,三个参数精准的显示当前ListView状态
onItemClick:条目点击事件,需要注意的是,当item是自定义VIEW和item设置了onTochEvent时
有可能会导致listener无法被调用,解决办法:
1.对ListView的根控件设置android:descendantFocusability="blocksDescendants"
2.自定义监听
常用adapter适配器:
1.ArrayAdapter(context,布局文件,控件ID,以维数组名) :只能实现内容单一的下滑显示
2.SimpleAdapter(context,集合,布局文件,String [ ] 建,int [ ] 控件id):显示的数据是多条键值对
例:List<Map<String,Object>>list=new HashMap<Map<String,Object>>();
d 创建每一个MAP对象,添加进list集合
map的键不会显示在屏幕上,值做选定数据用
3.BaseAdapter:使用频率最高的,直接添加类中的数据
回调: getCount()//设置总条目数据
getItem(int position)//返回条目对象
getItemId(int position)//返回条目对应ID
getView(int position,View converView,ViewGroup parent) //将条目转换成view对象,找条目对应的组件,设置每个条目数据
常用属性:
divider:在listView控件中添加分隔线,可以是图片或颜色线条
dividerHeight:分割线高度
listSelector:点击单个item时的显示效果,图片或颜色
ListView代码中
Adapter.notify():刷新当前ListView的数据
遍历ListView
ListView.getChildCount():获得当前ListView的所有Item
View view=ListView.getChildAt(int):返回一个View类型的item
优化adapter:
据说,经测试,利用ViewHolder将有效提高50%以上的效率
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //判断是否是缓存 if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(context, R.layout.my_item, null); //将控件用holder的属性,利用convertView的tag存起来 holder.tv = (TextView) convertView.findViewById(R.id.item_tv); convertView.setTag(holder); } else { //通过tag找到缓存的控件 holder = (ViewHolder) convertView.getTag(); } //设置要显示内容 holder.tv.setText(data.get(position).getName()); return convertView; } //缓存类,存放控件属性,一般都用ViewHolder命名 class ViewHolder { TextView tv; }
监听
OnTouchListener:监听DOWN,MOVE,UP事件发生时的坐标
listview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //触摸时 break; case MotionEvent.ACTION_MOVE: //移动时 break; case MotionEvent.ACTION_UP: //离开时 break; } return false; } });
OnScrollListener:在ListView滚动时,一直回调,三个参数精准的显示当前ListView状态
listview.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case NumberPicker.OnScrollListener.SCROLL_STATE_IDLE: //滑动停止时 break; case NumberPicker.OnScrollListener a103 .SCROLL_STATE_FLING: //手指抛动时,ListView惯性滑动时 break; case NumberPicker.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: //正在滚动 break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //firstVisibleItem:当前能看见的第一个item的ID(从0开始) //visibleItemCount:当前能看见的item总数 //totalItemCount:整个ListView的item总数 //Toast.makeText(MainActivity.this,""+visibleItemCount,Toast.LENGTH_LONG).show(); Log.e("TAG",listview.getLastVisiblePosition()+"");//获取区域内最后一个item的id Log.e("TAG",listview.getFirstVisiblePosition()+"");//获取区域内第一个item的id } });
onItemClick:条目点击事件,需要注意的是,当item是自定义VIEW和item设置了onTochEvent时
有可能会导致listener无法被调用,解决办法:
1.对ListView的根控件设置android:descendantFocusability="blocksDescendants"
2.自定义监听
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this,""+data.get(position).getName(),Toast.LENGTH_LONG).show(); } });
相关文章推荐
- Asp.Net Core
- android检测网络状态
- Oracle存储过程,函数,触发器
- 程序后台Activity被回收后再次启动fragment失效问题
- RFID破解三两事(原作者:YunFree)
- TYVJ P1933 绿豆蛙的归宿 题解(未完成)
- 为该目录以及子目录添加index.html
- 4000 Oracle游标的使用方法以及使用for循环实现游标的原理
- plsql结构定义,复合类型,行类型和列类型,逻辑控制语句
- 生成 SSH 公钥
- TensorFlow文本与序列的深度模型
- oracle对象【约束,序列,索引,视图,同义词】
- Activiti Designer实现排他网关
- 2016.7总结 培训 培训+培训
- Python 语言及其应用 Chapter_4_Note_1 推导式
- NBU 2430 war of energy
- 2016.7总结 培训 培训+培训
- TYVJ-P1864 守卫者的挑战 题解
- Active Directory域服务
- Java编程题目-3:字符串自定义encode(),decode()