【问题标题】:How to set multiple checkboxes checked based on a string array如何设置基于字符串数组检查的多个复选框
【发布时间】:2021-11-07 15:37:20
【问题描述】:

我要做的是获取保存在数据库中的字符串值,如果这些值等于 cheboxes 字符串值,则选中这些复选框。

没有详细说明,我在片段中的observe(getViewLifecycleOwner(), d -> { 中进行以下操作

String desc = d.damage.getDescription().trim();
Log.d("checkbox Op #1",desc);

哪个会返回这样的东西(取决于一次保存多少)

D/checkbox Op #1: NSR door NSR quarter NS roof rail OSR door OSR quarter NS sill OS sill NS sliding door OS sliding door

我执行以下操作来获取复选框字符串值并进行比较


for (int i=0; i<=19; i++)
{

    String sel5 = allCheckBoxes[i].getText().toString().trim();
    Log.d("checkbox Op #2", sel5);

    if (allCheckBoxes[i].getText().toString().trim().equals(desc))
    {
        allCheckBoxes[i].setChecked(true);
        Log.d("checkbox Op #3", allCheckBoxes[i].getText().toString());
    }
}

上面会返回哪个

D/checkbox Op #2: NSL wing
    NSF door
    NSR door
    NSR quarter
    NS roof rail
    OSF wing
    OSF door
    OSR door
    OSR quarter
    OS roof rail
    Bonnet
    Roof
    Tailgate/boot
    NS sill
    OS sill
    NS sliding door
    OS sliding door
    Front bumper
    Back bumper
    Motorbike tank

问题: 如果我在使用String desc = d.damage.getDescription().trim(); 时从数据库中检索 1 个值,则上述内容将正常工作,但是在大多数情况下,如前所述,它将大于 1,在这种情况下,代码将不起作用,我不确定我错过了什么。

完整代码


String desc = d.damage.getDescription().trim();

Log.d("checkbox Op #1",desc);

for (int i=0; i<=19; i++)
{

    String sel5 = allCheckBoxes[i].getText().toString().trim();
    Log.d("checkbox Op #2", sel5);

    if (allCheckBoxes[i].getText().toString().trim().equals(desc))
    {
        allCheckBoxes[i].setChecked(true);
        Log.d("checkbox Op #3", allCheckBoxes[i].getText().toString());
    }
}

【问题讨论】:

  • if(desk.contains(allCheckBoxes[i].getText().toString())) {..set checked...} else {..set unchecked.}

标签: java android for-loop checkbox


【解决方案1】:

问题在于,您的复选框中没有一个文本等于“NSR 门 NSR 四分之一 NS 车顶导轨 OSR 门 OSR 四分之一 NS 窗台 OS 窗台 NS 滑动门 OS 滑动门”。

有两种可能的解决方案。

第一个是我更喜欢的:不要返回包含数据库中所有可能值的单个 String,而是将其作为 List&lt;String&gt; 获取。

那么您的代码将如下所示:

List<String> descs = d.damage.getDescriptions();

Log.d("checkbox Op #1",desc);

for (int i=0; i<=19; i++)
{

    String sel5 = allCheckBoxes[i].getText().toString().trim();
    Log.d("checkbox Op #2", sel5);

    if (descs.contains(sel5))
    {
        allCheckBoxes[i].setChecked(true);
        Log.d("checkbox Op #3", sel5);
    }
}

另一个(恕我直言)解决方案是检查 desc 字符串是否包含复选框值:

String desc = d.damage.getDescription().trim();

Log.d("checkbox Op #1",desc);

for (int i=0; i<=19; i++)
{

    String sel5 = allCheckBoxes[i].getText().toString().trim();
    Log.d("checkbox Op #2", sel5);

    if (desc.conatains(sel5))
    {
        allCheckBoxes[i].setChecked(true);
        Log.d("checkbox Op #3", sel5);
    }
}

如果复选框值之一是其他值之一的子字符串,这是很危险的(例如,"NSF door""SF door" 会出现问题)。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2023-03-09
    • 2011-09-15
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多