[英]Android Checkbox in ListView Adapter getting unchecked after scrolling
我有一個帶有ImageView,TextView和CheckBox的自定義ListViewAdapter。
當我選擇特定的復選框並向下滾動時,向后滾動后,復選框將變為未選中狀態。
我嘗試了幾個答案,但似乎無濟於事。
這是我的代碼:
public class ListViewAdapterDrawer extends ArrayAdapter<String> {
ImageView imageViewSensor;
TextView textViewSensor, textViewLogging;
CheckBox checkBoxSensor;
private boolean[] itemChecked;
int count;
public ListViewAdapterDrawer(Context context, String[] sensorArray) {
super(context, R.layout.adapter_listview_drawer, sensorArray);
itemChecked = new boolean[sensorArray.length];
for (int i = 0; i < this.getCount(); i++) {
itemChecked[i] = false;
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.adapter_listview_drawer, parent, false);
}
imageViewSensor = (ImageView) convertView.findViewById(R.id.imageViewSensor);
textViewSensor = (TextView) convertView.findViewById(R.id.textViewSensor);
checkBoxSensor = (CheckBox) convertView.findViewById(R.id.checkBoxSensor);
checkBoxSensor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBoxSensor.isChecked()){
itemChecked[position] = true;
}else {
itemChecked[position] = false;
}
}
});
checkBoxSensor.setChecked(itemChecked[position]);
return convertView;
}
}
嘗試使用哈希圖維護復選框的狀態,因為當列表視圖滾動時,列表視圖會回收相同的視圖
HashMap<Integer, CoreQuestion.SubSection> selectionMap = new HashMap<>();
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.adapter_listview_drawer, parent, false);
}
imageViewSensor = (ImageView) convertView.findViewById(R.id.imageViewSensor);
textViewSensor = (TextView) convertView.findViewById(R.id.textViewSensor);
checkBoxSensor = (CheckBox) convertView.findViewById(R.id.checkBoxSensor);
checkBoxSensor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBoxSensor.isChecked()){
itemChecked[position] = true;
selectionMap.put(position,"true")
}else {
itemChecked[position] = false;
selectionMap.put(position,"false")
}
}
});
if(selectionMap.get(posotion)!=null)
{
checkBoxSensor.setChecked(itemChecked[position]);
}
return convertView;
}
}
可能有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.