嗨,我是新來的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());
}
}
感謝他的人固定的自動選擇..但仍然得到一些問題,例如,如果我有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