2

目標:行ごとに 2 つのチェックボックスがあり、各行がセクションに分かれている UI を作成しようとしています。以下に UI のスクリーンショットを含めました。

現在のアプローチ: ExpandableListView を使用し、onChildClick でデータを処理しています。

問題:チェックボックスをクリックしても、onChildClick などはトリガーされません。チェックボックス以外の場所をクリックすると、このイベントがトリガーされます。

調査: android:focusable="false" を設定することを提案するスレッドがたくさんありますが、それは私にとって何も変わりません。UI のすべての要素に対してフォーカス可能を false に設定しています。

再現: android:focusable="false" を含むこの記事のコードを変更せずに実行すると、まったく同じ問題が発生します。私はその例に基づいて多くのコードを作成しました。そのコードベースを使用して動作させることができれば、私のコードでも動作させることができると確信しています。

現在の UI

4

3 に答える 3

4

XML に 1 行が欠けているに違いありません。

xml に次の 2 行を含める必要があります (2 番目の行が最も重要です)。

android:focusable="false"
android:focusableInTouchMode="false"

これにより、行自体だけでなく、各チェックボックスを個別にクリックできるようになります。

次にonCheckChangedListener、アダプターにリスナーを設定getView()して、チェックボックスを処理します (位置、ビュー、および親情報にアクセスできる場所)。その後、 rwoonChildClickクリックを処理できます。

于 2012-06-22T06:23:50.073 に答える
3

私が理解している限り、チェックボックスはイベントを消費するため、OnChildClickListener はトリガーされません。タグ リスト項目で、次の行をチェックボックスに追加しました。

<CheckBox
    ...
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"/>

次に、チェックボックスを使用しないかのように OnChildClickListener を使用するだけです。

于 2015-03-03T08:28:37.223 に答える
0

チェックボックスがイベントを消費し、リスト項目に転送しないためだと思います。

ボックスのクリックを取得したい場合は、リスト アダプターの getView() 内のボックスに OnClickListener を追加できます。

わかりました、ボックスは少なくともチェックされていますか?カスタム動作が必要ない場合は、リストを「送信」するときにボックスがチェックされているかどうかを読み取ることができます (またはボックスをチェックする次のステップは何でも)。

コメントを読んだ後、いくつか追加したコード例を次に示します。

@Override
public View getView(final int pos, final View convView, ViewGroup parent) {

    //initialize convView, define other local variables, etc. 

    CheckBox cb = (CheckBox) convView.findViewById(R.id.mycheckbox);
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
            Log.d("ElistCBox2", "listitem position: " + pos); 
        } 
    });

    return convView;
}

匿名クラスで使用する変数には修飾子を使用する必要があることに注意してくださいfinal。そうしないと、コンパイラ エラーが発生します。

于 2012-06-21T19:43:01.400 に答える