2017-04-20 8 views
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; 
    } 
} 
+0

店舗のチェックボックスをカウントし、モデルクラス –

+0

はいでその状態。 CheckBoxModelでチェック状態のブール値を更新するには、onCheckedChangeリスナーを実装します(または呼び出されます)。 – greenapps

+0

それはまさに私がやったことです、あなたは私のコードを見直しましたか? –

答えて

0

しないでくださいmCheckboxModels =新しいArrayListを<>(); getViewメソッドに()

あなたはしなければならない。

民間のArrayList mCheckboxModels =新しいArrayListを<>()

関連する問題