Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否有任何方法可以根据动态值限制列表视图中复选框的选择?_Android_Listview_Checkbox - Fatal编程技术网

Android 是否有任何方法可以根据动态值限制列表视图中复选框的选择?

Android 是否有任何方法可以根据动态值限制列表视图中复选框的选择?,android,listview,checkbox,Android,Listview,Checkbox,我有一个列表视图(比如10个带有复选框的项目),我想限制用户选择I项目(即,I=1或2或3或4…) 假设如果i=3,用户只能从列表中选择3个复选框,他将无法选择第4个复选框。如果我们滚动列表视图,这些项将被重置为旧值,正如我们所知,可以通过在模型类中使用布尔状态来处理 如何限制用户从列表视图中选择特定项目 这是我的听众: final int i=3; holder.cb_check.setOnCheckedChangeListener(new OnCheckedChangeListene

我有一个列表视图(比如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);
            }
        }

    });

你可以使用

布尔选中=((复选框)视图).isChecked()

如果(!选中){

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

}

但在您的情况下,您必须管理3个信息复选框中的任何一个

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--;
        }
    }
});

以下是我的答案,适用于那些想在列表视图中添加特定选项的人

onClickListener上的内部适配器类:

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计数=0,max_计数=0全局值传递给适配器类,并将最大选择计数传递给适配器类

这里是值3:

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

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