-1

我有带有图像和复选框的列表视图,我必须限制用户检查 5 个复选框并禁用或使列表视图中的其他复选框不可见,并且每当用户取消选中先前选中的五个复选框之一时,应使复选框再次启用或可见。

4

3 回答 3

0

如果您只是想阻止用户选择超过 5 个 - 这意味着他们必须手动取消选中项目 - 只需使用 pratik 建议的计数器变量。如果您想自动取消选中用户检查的最旧的东西,我会使用所选索引的队列。然后你可以弹出最旧的东西,取消选中它,然后将新索引添加到队列中。您可以在 onItemClickListener 或 onItemSelectedListener 中完成所有这些操作

于 2012-10-05T14:57:41.617 回答
0

您可以通过计数器变量来执行此操作,因为您还必须使用迭代器检查所有复选框状态,或者您可以放入复选框的单击事件以检查它是否在检查第 5 个之后已经达到限制然后禁用另一个复选框,当它小于然后启用它重置复选框

于 2012-10-05T14:27:27.613 回答
0

您可以使用 onCheckedChangeListener。

添加一个私有整数:

private int checkedCounter;

初始化它:

checkedCounter = 0;

设置监听器:

yourCheckbox = (CheckBox) findViewById(R.id.itsId);
yourCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    {   
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
        {
            if (checkedCounter == 5 && isChecked)
            {
                yourCheckbox.setChecked(false);
            }
            else if checkedCounter == 5 && !isChecked)
            {
                checkedCounter--;
            }
            else if (checkedCounter < 5)
            {
                (isChecked ? checkedCounter++ : checkedCounter--);
            }
        }
    });

我现在无法运行此代码,因此请检查条件。实际上,它也可以以另一种方式完成:当检查5个框时,您可以在其他方面使用setEnabled(false)方法。

于 2012-10-05T15:02:01.477 回答