Android中ListView复用导致其他Item显示异常
2015-09-07 16:39
706 查看
基于上一个博客内容在在有大量Item的情况下,
Android会对ListView中的Item进行复用,
就会导致触发上面一个Item中的按钮后导致下面的按钮也跟着变
红色边框代表手机屏幕
Item1、Item2、Item3是在屏幕上显示
Item4、Item5需要滑动才可见
点击Item1后滑动屏幕后发现Item4也被触发了
不想出现这种情况需要对被点击的项进行一些处理
自定义一个Adapter
数据绑定可以参考上一篇文章
Android中ListView数据绑定和获取内部控件
http://blog.csdn.net/q12076235/article/details/48264277
Android会对ListView中的Item进行复用,
就会导致触发上面一个Item中的按钮后导致下面的按钮也跟着变
红色边框代表手机屏幕
Item1、Item2、Item3是在屏幕上显示
Item4、Item5需要滑动才可见
点击Item1后滑动屏幕后发现Item4也被触发了
不想出现这种情况需要对被点击的项进行一些处理
//定义一个列表用于保存选中项目 CustomSimpleAdapter adapter_your = new CustomSimpleAdapter(RecommendActivity.this, getData(), R.layout.list_recommendyour_item, new String[]{"MyID", "MusicName"}, new int[]{R.id.txt_myID, R.id.txt_music_title, R.id.txt_singer);
自定义一个Adapter
/* * 自定义Adapter、继承SimpleAdapter * 用于解决按钮被复用的问题 */ private class CustomSimpleAdapter extends SimpleAdapter { //定义一个列表用于保存选中项目 private List<Integer> mSelect = new ArrayList<Integer>(); public CustomSimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); // TODO Auto-generated constructor stub } //重点是这里,需要重写getView @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub final int mPosition = position; //获取当前的View convertView = super.getView(position, convertView, parent); //取出按钮或是CheckBox ImageButton btn_more = (ImageButton) convertView.findViewById(R.id.btn_more); btn_more.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //此处记录下当前操作的mPosition mSelect.add(new Integer(mPosition)); //下面是你对应的页面效果处理,比如显示、隐藏 int visiblePosition = list_your.getFirstVisiblePosition(); View currentView = list_your.getChildAt(mPosition - visiblePosition); currentView.findViewById(R.id.control2).setVisibility(View.VISIBLE); currentView.findViewById(R.id.control1).setVisibility(View.GONE); } }); ImageButton btn_back = (ImageButton) convertView .findViewById(R.id.btn_back); btn_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //此处删除当前操作的mPosition mSelect.remove(new Integer(mPosition)); //下面是你对应的页面效果处理,比如显示、隐藏 int visiblePosition = list_your.getFirstVisiblePosition(); View currentView = list_your.getChildAt(mPosition - visiblePosition); currentView.findViewById(R.id.control1).setVisibility(View.VISIBLE); currentView.findViewById(R.id.control2).setVisibility(View.GONE); } }); //在结尾的时候重记录的列表中对页面效果进行处理 if (mSelect.indexOf(mPosition) > -1) { convertView.findViewById(R.id.control2).setVisibility(View.VISIBLE); convertView.findViewById(R.id.control1).setVisibility(View.GONE); }else{ convertView.findViewById(R.id.control1).setVisibility(View.VISIBLE); convertView.findViewById(R.id.control2).setVisibility(View.GONE); } return convertView; } }
数据绑定可以参考上一篇文章
Android中ListView数据绑定和获取内部控件
http://blog.csdn.net/q12076235/article/details/48264277
相关文章推荐
- 使用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简析