在向下滚动时随机选择自定义列表视图复选框
问题描述:
嗨,我是新来的android和自定义列表视图与复选框,因为我面临随机选择另一个列表项复选框,而滚动。我已经通过一些线程,但没有解决我的问题。请帮我解决这个问题。这里是我的自定义适配器在向下滚动时随机选择自定义列表视图复选框
CustomAdapter.java
public class CustomAdapter extends BaseAdapter{
private boolean[] checkBoxState;
private final Activity context;
public final ArrayList<SelectedListModel>list;
private SelectedListModel element;
private ArrayList<SelectedListModel> positions = new ArrayList<SelectedListModel>();
public CustomAdapter(Activity applicationContext,
ArrayList<SelectedListModel> contacts) {
// TODO Auto-generated constructor stub
this.context = applicationContext;
this.list = contacts;
this.checkBoxState=new boolean[contacts.size()];
}
static class ViewHolder {
protected TextView name,number;
protected CheckBox checkbox;
}
public int getCount() {
// TODO Auto-generated method stub
System.out.println("list size:"+list.size());
return list.size();
}
public ArrayList<SelectedListModel> getSelectedItemList() {
// TODO Auto-generated method stub
return positions;
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row_listview, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.textView1);
viewHolder.number = (TextView) convertView.findViewById(R.id.textView2);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkBox1);
viewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
element = (SelectedListModel)viewHolder.checkbox.getTag();
if(buttonView.isChecked()==true){
checkBoxState[position] = buttonView.isChecked();
element.setSelected(checkBoxState[position]);
positions.add(element);
}else{
checkBoxState[position] = buttonView.isChecked();
element.setSelected(checkBoxState[position]);
positions.remove(element);
}
}
});
viewHolder.checkbox.setTag(list.get(position));
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) convertView.getTag();
setNameAndNumber(list.get(position),holder,position);
return convertView;
}
private void setNameAndNumber(SelectedListModel selectedListModel,ViewHolder holder, int position)
{
// TODO Auto-generated method stub
holder.name.setText(selectedListModel.getName());
holder.number.setText(selectedListModel.getNumber());
holder.checkbox.setSelected(selectedListModel.isSelected());
}
}
答
你设置 “中选择” 状态,但不是 “检查” 状态:
holder.checkbox.setSelected(selectedListModel.isSelected());
holder.checkbox.setChecked(selectedListModel.isSelected());
答
mViewHolder.checkBox = (CheckBox)convertView.findViewById(R.id.checkBox1);
mViewHolder.checkBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v.findViewById(R.id.checkBox1);
if (cb.isChecked()) {
checkBoxArrayList.set(position, true);
} else if (!cb.isChecked()) {
checkBoxArrayList.set(position, false);
}
}
});
您好,下面链接可能对您有帮助http://mylearnandroid.blogspot.in/2014/06/listview-problem-while-scrolling.html
感谢他的人固定的自动选择..但仍然得到一些问题,例如,如果我有15名单项目和滚动到第10项并选择两者。现在我没有得到确切的列表项目,而是获得第三项作为选定的一个。 – saravana 2013-05-13 06:17:05
不要确切地得到现在的问题,但是您要跟踪三个地方(布尔数组,选定列表,模型)中的选择,我建议您简化它并仅在模型中跟踪它。这至少可以说明发生了什么事情。 – dmon 2013-05-13 14:24:04
再次感谢..有另外一个问题\t 如果我从另一个活动动态地将数据添加到数组列表中,那将取代arraylist中的旧数据。所以如何处理。 – saravana 2013-05-15 18:49:01