0

我有一个 ListView 适配器,我在其中从 XML 编写 ListItems。我想在检查项目时标记并在未检查项目时取消标记。我正在使用一个数组来存储标志值。例如,如果我的 ListView 有四个列表项“红、蓝、绿、黄”。如果选中 Red 和 Green,则数组应更新为 [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 回答