如何检查ListView项是否已选中

时间:2015-07-13 18:32:42

标签: android android-listview android-listfragment

点击后,我正在使用list.setItemChecked(position, true)将项目设置为ListView中已选中的项目。但是,我没有找到任何方法来查看列表项是否已选中。

ListView项目没有复选框/广播,不使用CheckedTextViewListView设置为CHOICE_MODE_SINGLE

ListView onItemClick Listener

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
      list.setItemChecked(position, true);
}

适配器getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    rowView = inflater.inflate(R.layout.rowlayout, parent, false);
    vg = parent;
    TextView textView = (TextView) rowView.findViewById(R.id.label);
    textView.setText(names[position]);
    TextView textView2 = (TextView) rowView.findViewById(R.id.tvValue);
    textView2.setText(stock[position]);
    return rowView;
}

有没有办法检查列表项是否已选中?例如,在onItemClick侦听器中执行类似:

的操作
if(position.isChecked()) {
    //do something
}

我已经看了一遍,似乎无法在没有添加复选框/收音机到布局和改变周围的情况下提出任何建议。我感谢任何建议,谢谢!

修改

标题有点令人困惑,所以只是为了澄清:问题不在于项目没有明确选择/未选择,我需要处理第二次点击已选择的项目。我使用简单的if / else逻辑来处理这个问题,但它在项目的其他地方引起了问题,这就是为什么我想知道是否有一些内置功能来检查项目是否被检查。

2 个答案:

答案 0 :(得分:8)

您可以使用list.isItemChecked(position)。请参阅docs

答案 1 :(得分:1)

如果使用Buddy的isItemChecked(position)建议不适合您,则listener内的下方是可能的解决方案。

如果我正确理解您的愿望,您基本上希望用户先选择一个项目,然后再单击该项目“确认”选择。

如果是这种情况,我认为你非常接近于制定解决方案。在listener之外创建一个变量。在OnItemClickListener中,if变量为空或不等于所选Item,请将变量设置为所选Item的值。 Else,运行您想要的代码!

示例:

myListView.setOnItemClickListener(new OnItemClick Listener() {
    public void onItemClick(AdapterView<?> parentView, View childView, int position, long id) {
        if (selectedItem == null || selectedItem != position)
            selectedItem = position;
        else {
            //do whatever it is you wanted to do after the second click!
        } //end else
    } //end onItemClick
}); //end onItemClickListener

当然,每当您再次提起selectedItem时,您都希望清除ListView!你觉得怎么样?