【问题标题】:How to make checkbox checked in the OnItemClickListener()?如何在 OnItemClickListener() 中选中复选框?
【发布时间】:2012-01-10 02:58:14
【问题描述】:

我的 ListView 行中有一个复选框,如下所示。

===========================================
[CheckBox] [TextView] [TextView] [TextView]
===========================================

xml代码在这里

<CheckBox
    android:id="@+id/course_search_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:clickable="false"
    android:focusable="false" />

并且我已经将复选框设置为不可点击且不可聚焦,以便将点击事件传递给 ListView。

我在这里要做的是,当用户单击列表视图时,选中 CheckBox 并将列表视图的单击位置添加到数组列表中。那么如何在 ListView 的 OnItemClickListener 中勾选 CheckBox?

请帮忙,谢谢。

【问题讨论】:

    标签: java android listview checkbox onitemclicklistener


    【解决方案1】:

    如果是单个选择列表,那么您需要来自ListView 的这些 api 来获取位置/id:

    getSelectedItemId()
    getSelectedItemPosition()
    

    现在,如果您已经为 ListView 实现了适配器。对于bindViewgetView 等 api(取决于您使用的适配器),您已根据上述 api 设置检查状态。像

    public View getView(int position, View convertView, ViewGroup parent)
    {
      ListView listView = (ListView)parent; // This is the parent view group passed as argument.
      CheckBox cb = (CheckBox)convertView.findViewById(R.id.check_box);
      if(getSelectedItemPosition() == position)
         cb.setChecked(true);
      else
         cb.setChecked(true);
     }
    

    对于多选,您需要来自 ListView 的以下 api:

    getCheckedItemPositions
    

    检查复选框的代码将类似于单选(虽然不准确)。

    注意:提及的代码仅供参考。它不是优化的代码。肯定需要修改。 注意:

    【讨论】:

      【解决方案2】:

      您可以在 OnItemClickListener 中添加此代码:

      public void onItemClick(AdapterView parent, View view, int position, long id){
         CheckBox box = (CheckBox)view.findViewById(R.id.course_search_checkbox);
         box.setChecked(true);
      }
      

      【讨论】:

      • 顺便说一句,如果您滚动列表,此代码将出现问题。您将丢失您的选择或可能错误地选择了复选框。 Android 尝试重用视图。
      猜你喜欢
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 2012-04-11
      • 1970-01-01
      相关资源
      最近更新 更多