0
My ListView Itemには、TextViewとLinearLayoutが含まれています。 LinearLayoutには動的に生成されるCheckBoxが含まれていますが、チェックボックスの数は各リスト項目で異なる場合があります。私は、アイテムを画面からスクロールして、スクロールしてフォーカスを戻すときに、チェックボックスの状態を保存します。今は救われていません。ここに私のコードがあります、あなたは私が間違っていることを教えてくれますか?ListViewに動的に生成されたチェックボックス状態を保存する
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;
}
}
店舗のチェックボックスをカウントし、モデルクラス –
はいでその状態。 CheckBoxModelでチェック状態のブール値を更新するには、onCheckedChangeリスナーを実装します(または呼び出されます)。 – greenapps
それはまさに私がやったことです、あなたは私のコードを見直しましたか? –