簡體   English   中英

將動態生成的復選框狀態保存在ListView中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM