2

textviewとチェックボックスを使用してリストビューを作成しました。ただし、リストを下(または上)にスクロールすると、リスト内のチェックされているすべての項目が選択解除されます。チェックされたチェックボックスをスクロール後もその状態を保持させるにはどうすればよいですか?

4

3 に答える 3

3

ListView は、スクロールされるたびにビューをリサイクルします。そのため、チェックボックスは状態を保持しません。

タスクを完了するには:

  • チェックした項目を配列に格納します。
  • リストビューのチェックボックスをクリックすると、配列内のその特定の項目の値が変更されます。
  • getView メソッド内で、配列から値を読み取ってチェックボックスをオンまたはオフにします。

そうすれば、チェックボックスの状態が保持されます。これが明確であることを願っています。

于 2012-08-13T09:30:16.240 に答える
0

リストに変更を加えるときは、リストの状態を保存する必要があります。あなたのcheckedItemsのarrayListを維持する必要があります。この投稿は、この点でより役立つことが証明されるかもしれません..

于 2012-08-13T08:57:24.680 に答える
0

このアダプター クラスを使用して、選択したチェックボックス ID を取得できます。listview.getPositionForView(cBox)

   public class aAdapter extends SimpleAdapter {
    //private List<Table> tables;
    SharedPreferences prefs;
    private Activity activity;
    String val = "";

    //@SuppressWarnings("unchecked")
    public aAdapter(Activity context, List<? extends Map<String, String>> tables, int resource, String[] from,
            int[] to) {
        super(context, tables, resource, from, to);
        //this.tables = (List<Table>) tables;
        activity    =   context;
    }

    public View getView(final int position, final View convertView, ViewGroup parent) {
        View row = super.getView(position, convertView, parent);
        if (row == null) 
        {
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.reports_list, null);
        }       

        final CheckBox cBox=(CheckBox)row.findViewById(R.id.cb1);
        if(bulkflag)
        {
            cBox.setVisibility(View.VISIBLE);
        }
        else
        {
            cBox.setVisibility(View.GONE);
        }
        cBox.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                if(cBox.isChecked())
                {
                    //selectedIds.add(recIdArr.get(reportslistview.getPositionForView(cBox)));
                      System.out.println("position "+reportslistview.getPositionForView(cBox)+" Checked");
                }
                else
                {
                      System.out.println("position "+reportslistview.getPositionForView(cBox)+" UnChecked");
                }
            }
        });
        return row;
    }
}
于 2012-08-13T09:00:17.527 に答える