基于上一个博客内容在在有大量Item的情况下,
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