3

Expandable ListView に SQLite データベースのエントリを表示していますが、すべて正常に動作していますが、すべての子のすぐ横にチェックボックスを追加したいと考えていました。チェックボックスをチェックしてから下にスクロールするか、チェックしたチェックボックスを縮小するたびに、チェックボックスの状態が保存されません。下にスクロールしてグループを展開するたびに、リストがリサイクルされることを知っています。すべてのチェックボックスの状態を (すべての子によって) 保存するにはどうすればよいですか? CursorTreeAdapter を拡張するクラスがあり、メソッドに「childPosition」がありません。状態を保存するために何をする必要がありますか?

4

2 に答える 2

1

リスト要素の合計と同じサイズのブール値フラグの配列を設定し、この配列から任意のコンポーネントのチェック値を取得できます。

于 2012-01-09T05:18:58.507 に答える
0

もう1つの解決策は、リストビューの各要素のカウンターを保持できることです。たとえば、Person リストがある場合、Person クラスにカウンター変数を 1 つ追加できます。

getChildView メソッドでは、以下のようにすべてのコードを if ブロックに入れます。

    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) {

    //FOR SAVE THE STATES!!
    if(parents.get(groupPosition).getCounter()==0) {
        DatePicker datePicker = null;
        Button ok = null;
        Spinner installment = null;
        CheckBox creditCard;
        ......//BLA BLA BLA


        //After finish your codes, increment the counter
        parents.get(groupPosition).setCounter((parents.get(groupPosition).getCounter()+1));
    }

    return convertView;
}

expandGroup メソッドが呼び出されるたびに、すべての初期化 (現時点では if ブロック内にあります) が繰り返されるためです。そのため、オブジェクトの状態が失われます。

この助けを願っています。

于 2016-03-10T09:41:28.240 に答える