0

2つの問題があります。

1つ目の問題。
私は CheckedTextView の "Select All" アイテムと、MutipleChoice のアダプターに設定された配列アイテムのリストを持っています。現在、CheckedTextView を選択して、配列項目のすべてのチェックボックスの状態を true/false に設定しようとしています。動作しますが、バグがあります。配列の最後の項目が true の場合、"SelectAll" を true にすると機能しますが、配列の最後の項目が false の場合は、すべての項目のチェックが外されます。私が望むのは、項目の状態のいずれかが false であっても、checkedtextview が true に選択されたときに true に設定されることです。

2番目の問題。
配列項目の状態がすべて true の場合、checkedtextview を true に設定できないようです。

私のやり方が間違っているのではないでしょうか?与えられた助けをいただければ幸いです..

これは、CheckedTextView「すべて選択」の私の方法です

private void markAll (Boolean state) {

    for (int i = 0; i < lv.getCount(); i++) {
        lv.setItemChecked(i, state);
    }           
}

これは、配列項目の状態を確認するためのコーディングです。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    for(int i = 0; i < lv.getCount(); i++) {
        //if even 1 of the item is false, the checkedtextview will be set to false
        if(lv.isItemChecked(i) == false) {
            ctv.setChecked(false);
        }
        //if all of the item is true, the checkedtextview will be set to true as well
        //the coding should be done in the if-else below, if i'm not wrong
        if(...) {

        }
    }
}

EDIT
これは私のメソッドを呼び出すための新しいコードです ctv.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            ctv.setClickable(true);
            if(ctv.isPressed() && ctv.isChecked() == false) {
                ctv.setChecked(true);
                markAll(true);
            }
            else {
                ctv.setChecked(false);
                markAll(false);
            }
        }
    });

これはcheckedtextviewの私のxmlコードです

    <CheckedTextView
        android:id="@+id/checkedtext"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:text="Select all"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:clickable="true"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:paddingLeft="6dip"
        android:paddingRight="6dip"/>
4

1 に答える 1

0

この作り直されたロジックを試してください:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    ctv.setChecked(true); // assume true at first

    // if even 1 of the item is false, the checkedtextview will be set to false
    for(int i = 0; i < lv.getCount(); i++) {
        if(lv.isItemChecked(i) == false) {
            ctv.setChecked(false);
            break; // exit loop if you have found one false
        }
    }
}

これによりctv、リスト内のすべてのアイテムがチェックされている場合はチェックされた状態になり、そうでない場合はいずれかが false の場合はctvチェックされていない状態になります。

ctvそれ自体をクリックしたときの動作を制御するには:

ctv.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(ctv.isChecked()) {
                markAll(true); // ctv is checked, so make all others checked
        }
        else {
              markAll(false); // ctv is unchecked, so make all others unchecked
        }
    }
});

ここで他のアイテムの状態をチェックする必要はありません。それが単なる「(すべて選択解除)」ボタンである場合は、それ自体の状態を他のアイテムに伝播するだけです。

于 2011-01-11T16:33:21.710 に答える