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