【问题标题】:Android Checkbox listview select all (disable/enable) [duplicate]Android Checkbox listview全选(禁用/启用)[重复]
【发布时间】:2011-05-31 23:47:36
【问题描述】:

我想禁用/启用列表视图中的所有复选框。事实上,希望通过单击顶部复选框来选择所有行为。

谢谢

【问题讨论】:

    标签: android listview checkbox


    【解决方案1】:
    for(int i=0; i < listView.getChildCount(); i++){
        RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i);
        CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox);
        cb.setChecked(true);
    }
    

    您需要编辑此代码以处理启用和禁用,但我希望您明白这一点!

    此外,这只检查每个复选框,确保您从列表中返回一个 id 或对象,以便将数据发送/保存到其他地方。

    【讨论】:

    • 排序.. 非常感谢 Abhinav.. 非常感谢
    • 当我选中所有项目然后取消选中一项时,此代码会产生一些奇怪的行为。 Thom Nichols 的解决方案更好。
    • 我的列表视图中有按钮。单击列表视图之外的按钮时,我需要更改列表视图中存在的整个按钮的背景。我使用了您的代码,但出现错误。如何做到这一点。
    • 这只会检查当前正在查看的项目。因此,如果您的 listView 包含的项目多于视图可以显示的项目,则不会检查所有项目。 Thom Nichols 的回答确实是正确的解决方案。
    • 像魅力一样工作
    【解决方案2】:

    这最终对我有用,我使用光标适配器,而不仅仅是 ArrayListAdapter 用于我的列表项:

    final ListView list = getListView();
    for ( int i=0; i< getListAdapter().getCount(); i++ ) {
            list.setItemChecked(i, true);
    }
    

    list.getChildCount 不起作用,因为它似乎只计算立即绘制的内容(而不是屏幕外的所有内容),因此当整个列表包含 100 个或更多项目时,childCount 可能只有 6 或 8 个项目。另外,因为我必须使用 list.setItemChecked 来让项目“保持检查”——至少在我的列表项目是 CheckedTextView 的实例的情况下。

    【讨论】:

    • 如何使用这样的按钮?
    • 谢谢你.. 因为 childCount,我遇到了麻烦
    【解决方案3】:

    只需在适配器中添加一个参数为

    Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false);
    listview.setAdapter(adapter);
    

    在选择所有按钮单击监听器时添加此代码

    MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true);
    listview.setAdapter(adapter);
    

    并签入适配器

    if(chk) {
        blue_check.setVisibility(View.VISIBLE);
    } else {
        blue_check.setVisibility(View.GONE);
    }
    

    【讨论】:

      【解决方案4】:

      我认为您应该在 UI 线程之外运行这个长时间运行的任务。当您单击 OnClickListener 中的按钮时:

      new Thread(new Runnable() {
                          @Override
                          public void run() {
                              for (int i = 0; i < list.getAdapter().getCount(); i++) {
                                  final int position = i;
                                  mHandler.post(new Runnable() {
                                      @Override
                                      public void run() {
                                          list.setItemChecked(pos, true);  
                                      }
                                  });
                              }
                          }
                      }).start();     
      

      在 onCreate() 中:

      this.mHandler = new Handler();
      

      列表视图中的每个项目都应该是 Checkable ,就像实现 Checkable 接口的 CheckableRelativeLayout 一样。

      【讨论】:

        猜你喜欢
        • 2013-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        相关资源
        最近更新 更多