如何在检查ListView中的ListItem时设置标志,并在取消选中时将其设置为关闭?

时间:2013-01-26 02:19:58

标签: java android android-listview

我有一个ListView适配器,我从XML编写ListItems。我希望在检查项目时进行标记,并在取消选中项目时取消标记。我正在使用数组来存储标志值。例如,如果我的ListView有四个列表项“红色,蓝色,绿色,黄色”。如果选中红色和绿色,则应将数组更新为[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]);
            }


        }
    });

2 个答案:

答案 0 :(得分:0)

我无法确切地说出你的问题在哪里,因为我不确定你认为你应该得到什么输出,我不知道bArray在哪里宣布。但在这种情况下我可能会使用LinkedHashMap。这会保留Map的顺序,您可以将该位置与列表中的位置匹配或按名称进行比较。选中或取消选中该位置后,您可以相应地将其值设置为1或0.

<强> Here is the Docs on Liked Hashmaps

答案 1 :(得分: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;