1


アクティビティに16個のチェックボックスがあり、そのうちユーザーは8個のチェックボックスから1個を選択する必要があります。
したがって、最終的にユーザーは16個のチェックボックスから2個のチェックボックスを選択することになります。

更新:チェックボックスはすでにxmlレイアウトファイルにあります。したがって、私は彼らのIDにアクセスできます。

今まで、単純なonCheckedChangeリスナーを実装し、switch caseブロックで8つのチェックボックスから1つのチェックボックスを選択し、残りの7つのチェックボックスの選択を解除することを考えていました。しかし、このアプローチは非常に苦痛です。

また、それらのどれが選択されているかを抽出する必要がある場合、それは完全な混乱になります。

それで、私がこれらの両方を行うことができる最も単純で柔軟な方法は何ですか?提案は大歓迎です
ありがとう

4

2 に答える 2

5

CheckBox一度に1つだけをチェックしておくことができます(aと同様RadioGroup)。これらを配列にグループ化し(アクセスと処理を容易にするため)、OnClickListenerそれぞれにaを設定してステータスを設定します。

CheckBox[] chkArray = new CheckBox[8];
chkArray[0] = (CheckBox) findViewById(R.id.cb1R1);
chkArray[0].setOnClickListener(mListener);
chkArray[1] = (CheckBox) findViewById(R.id.cb2R1); // what id do you have?
chkArray[1].setOnClickListener(mListener);
// so on for the rest of the 8 CheckBoxes

private OnClickListener mListener = new OnClickListener() { 

     @Override
     public void onClick(View v) {
        final int checkedId = v.getId();
        for (int i = 0; i < chkArray.length; i++) {
            final CheckBox current = chkArray[i];
            if (current.getId() == checkedId) {
                 current.setChecked(true);
            } else {
                 current.setChecked(false);
            }
       }    
    }
};
于 2013-01-09T15:30:38.180 に答える
0

list1box1list1box2....のような単純な名前を付けてください。list2box1list2box2...名前には2つの配列があります--list1array--list2array

今と同じリスナーがまだあります:リスナー内で最初にifステートメントを実行して、クリックされたアイテムがlist1アイテムまたはlist2であるかどうかを確認し、それに基づいて、その特定のリスト内のすべてのアイテムをループするforループを作成します。チェック/チェックを外します。

抽出するには、各配列をチェックするだけで、どの項目がチェックされているかどうかを確認できます

于 2013-01-08T14:41:53.037 に答える