0

XML から ListItems を書き込んでいる ListView アダプターがあります。アイテムがチェックされているときにフラグを立て、アイテムがチェックされていないときにフラグを外したい。フラグ値を格納するために配列を使用しています。たとえば、ListView に「赤、青、緑、黄」の 4 つのリスト項目があるとします。赤と緑がチェックされている場合、配列は [1, 0, 1, 0] に更新され、チェックされていない場合は [0, 0, 0, 0] に更新されます。以下は私のコードです。何か間違ったことをしたため、目的の出力が表示されません。誰かがそれを調べて、それを解決するためのより良い方法を提案してもらえますか? ありがとうございました!

ArrayAdapter<String> adapter;

    array =  getResources().getStringArray(R.array.facilities);
    strings1 = new ArrayList(Arrays.asList(array));

    TopicSelectionListAdapter topicSelectionListAdapter = new TopicSelectionListAdapter(
            second.this, R.layout.listrow, strings1);
    listView.setAdapter(topicSelectionListAdapter);
    listView.setItemsCanFocus(false);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    for(int i=0;i<strings1.size();i++){
        listView.setItemChecked(i, false);
    }

    listView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,
                long arg3) {
            CheckedTextView selectedItem = (CheckedTextView) view;
            boolean isChecked = selectedItem.isChecked();

            Log.e("TAG","item clicked position = " + position + " isChecked = " + isChecked);
            for(int i=0; i< strings1.size(); i++){
                if(!isChecked){
                    bArray[i]= 0;
                }
                else{
                    bArray[i]= 1;
                }


            }
            for(int i =0; i < bArray.length; i++){
                Log.e("TAG","boolean Array value = " + bArray[i]);
            }


        }
    });
4

2 に答える 2

0

どの出力が得られていないのか、あなたがすべきだと思う出力がわからないため、問題がどこにあるのか正確にはわかりません。また、どこbArrayで宣言されているのかもわかりません。しかし、私はおそらくLinkedHashMapこの状況で a を使用するでしょう。これにより、の順序が保持され、Mapその位置をリスト内の位置と一致させたり、名前で比較したりできます。その位置がチェックされているかチェックされていない場合、それに応じてその値を 1 または 0 に設定できます。

いいねされたハッシュマップに関するドキュメントはこちら

于 2013-01-26T02:37:50.927 に答える
0

この部分は単にあなたの各部分をチェックしますbArray

  for(int i=0; i< strings1.size(); i++){
      if(!isChecked){
          bArray[i]= 0;
      }
      else{
         bArray[i]= 1;
      }
  }

この理由は、bArrayこの特定のイベントの要素がチェックされているかどうかを確認せずに配列全体を単純に消去することです...これを行うと、より良い結果が得られるはずです:

bArray[position] = isChecked?1:0;
于 2013-01-26T03:41:04.950 に答える