[英]Saving dynamically generated checkbox state in a ListView
我的ListView項包含一個TextView和LinearLayout。 LinearLayout包含動態生成的CheckBox,每個列表項中復選框的數量可以不同。 當我從屏幕上滾動該項目並將其滾動回焦點時,我想保存復選框的狀態。 目前尚未保存。 這是我的代碼,您能告訴我我做錯了什么嗎?
public class ListAdapter extends ArrayAdapter<BaseModel> {
private ArrayList<CheckboxModel> mCheckboxModels;
private static class ViewHolder {
TextView mName;
LinearLayout mLinearLayout;
}
public ListAdapter(Context context, ArrayList<BaseModel> baseModels) {
super(context, 0, baseModels);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
final BaseModel currentBaseModel = getItem(position);
mCheckboxModels = new ArrayList<>();
View currentRow = convertView;
ViewHolder viewHolder;
if (currentRow == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
currentRow = inflater.inflate(R.layout.list_item, parent, false);
viewHolder.mName = (TextView) currentRow.findViewById(R.id.idTextView);
viewHolder.mLinearLayout = (LinearLayout) currentRow.findViewById(R.id.idCheckboxLinearLayout);
currentRow.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) currentRow.getTag();
}
if (currentBaseModel != null) {
viewHolder.mName.setText(currentBaseModel.getName());
viewHolder.mLinearLayout.removeAllViewsInLayout();
int numOfButtons = currentBaseModel.getNumOfButtons();
for (int i = 0; i < numOfButtons; i++) {
mCheckboxModels.add(new CheckboxModel(new CheckBox(getContext()), false));
currentBaseModel.setCheckboxModels(mCheckboxModels);
viewHolder.mLinearLayout.addView(currentBaseModel.getCheckboxModels().get(i).getCheckBox());
final int j = i;
currentBaseModel.getCheckboxModels().get(i).getCheckBox().setOnCheckedChangeListener(
new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
currentBaseModel.getCheckboxModels().get(j).setChecked(isChecked);
}
});
currentBaseModel.getCheckboxModels().get(i).getCheckBox()
.setChecked(currentBaseModel.getCheckboxModels().get(i).isChecked());
}
}
return currentRow;
}
}
不要執行mCheckboxModels = new ArrayList <>(); 在getView()中
你必須做:
私有ArrayList mCheckboxModels = new ArrayList <>()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.