【问题标题】:Is there any way to restrict the selection of the check box in list view according to the dynamic value?有没有办法根据动态值限制列表视图中复选框的选择?
【发布时间】:2015-08-19 06:11:00
【问题描述】:

我有一个列表视图(比如 10 个带有复选框的项目),我想限制用户选择 i 项目(即 i=1 或 2 或 3 或 4...)。

如果i=3,用户只能从列表中选择3个复选框,他将无法选择第4个复选框。如果我们滚动列表视图,项目将被重置为旧值,因为我们知道这可以通过在模型类中使用布尔状态来处理。

如何限制用户从列表视图中选择特定项目?

这是我的听众:

final int i=3;
    holder.cb_check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            model.setChecked(isChecked);

            if (isChecked) {
                GlobalCounter++;
            } else {
                GlobalCounter--;
            }


            if (GlobalCounter>i) {
                buttonView.setChecked(false);
                model.setChecked(false);
            }
        }

    });

【问题讨论】:

  • 这里有一个建议。维护一个柜台。每次用户选中一个框时,增加它,取消选中它然后减少它。检查计数器的值。如果它大于允许的不允许他检查。
  • 我已经编辑了我的问题,请检查一下我已经尝试过了。需要一个好的方法。
  • 我建议你将计数器的检查移到 setChecked 语句之上。
  • 您想控制适配器内的选中复选框还是保存列表视图的活动/片段中的复选框?
  • @UmaKanth...是的,谢谢你的建议。

标签: android listview checkbox


【解决方案1】:

你可以使用

boolean check = ((CheckBox) view).isChecked();

如果(!检查){

//如果需要,在此处执行操作

}

但在您的情况下,您必须管理复选框 3 信息的数量

【讨论】:

    【解决方案2】:

    这样做

    final int i=3;
    holder.cb_check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
    
            if (GlobalCounter>i) {
                buttonView.setChecked(false);
                return;
            }
    
            model.setChecked(isChecked);
            if (isChecked) {
                GlobalCounter++;
            } else {
               GlobalCounter--;
            }
        }
    });
    

    【讨论】:

      【解决方案3】:

      这是我的答案,适用于那些想要在列表视图中添加特定选择的人。

      onClickListener 上的 Adapter 类内部:

      holder.cb_check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      
              @Override
              public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                  // TODO Auto-generated method stub
                  model.setChecked(isChecked);
                  if (isChecked) {
                      count++;
                  } else {
                      count--;
                  }
                  Log.d("ttt", "c="+count+" mc="+max_count);
                  if (count>max_count) {
                      buttonView.setChecked(false);
                      model.setChecked(false);
                      count=max_count;//count will not exceed the limit. 
                      Toast.makeText(context, "You can only select "+max_count, Toast.LENGTH_SHORT).show();
                  }
              }
      
          });
      

      初始化int count=0,max_count=0;全局到适配器类,同时设置适配器将max_selection计数传递给适配器类。

      这里是值 3:

      final ComboAdapter adapter=new ComboAdapter(getApplicationContext(), R.layout.custom_items, arr_list,3);
          lv_combo.setAdapter(adapter);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-06
        • 2015-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        相关资源
        最近更新 更多