Android - 比较Array / Arraylist元素以预先选中复选框的有效方法

时间:2016-07-03 12:21:31

标签: java android arrays list arraylist

想在我的Android测验应用程序中加载用户测验结果。我将数据库中的结果作为String获取。在下一步中,我将此String转换为数组,然后转换为arraylist。然后我通过列表迭代来获取复选框的ID,比较它们并检查它们是否匹配。

        userResultCursor = db.getUserResults(question.getId());
        if (userResultCursor != null && userResultCursor.getCount() != 0) {
            String resultString = userResultCursor
                    .getString(userResultCursor.getColumnIndexOrThrow(MyDatabase.ResultColumns.RESULT));
            String resultArray[] = convertStringToArray(resultString);
            List<String> resultList = Arrays.asList(resultArray);

            for (String id : resultList) {
                if (cb_answer1.getId() == Integer.parseInt(id)) {
                    cb_answer1.setChecked(true);
                }

                if (cb_answer2.getId() == Integer.parseInt(id)) {
                    cb_answer2.setChecked(true);
                }

                if (cb_answer3.getId() == Integer.parseInt(id)) {
                    cb_answer3.setChecked(true);
                }

                if (cb_answer4.getId() == Integer.parseInt(id)) {
                    cb_answer4.setChecked(true);
                }

                if (cb_answer5.getId() == Integer.parseInt(id)) {
                    cb_answer5.setChecked(true);
                }
            }
        }

我实际上不喜欢这个解决方案,因为它看起来很尴尬。 我认为有一个更好的解决方案。 您是否有任何提示以有效的方式获得相同的结果?

1 个答案:

答案 0 :(得分:1)

您可以缩短此代码,但就性能而言,就我而言,它实际上可以提高效率。

您是否看到重复cb_answer1cb_answer2cb_answer3的人?这意味着你可能需要一个数组:

CheckBox[] answerCheckBoxes = { cb_answer1, cb_answer2, cb_answer3 } 
// I'm lazy. Please add the rest in yourself

现在你可以循环播放它:

for (CheckBox cb : answerCheckBoxes) {
    if (cb.getId() == Integer.parseInt(id)) {
        cb.setChecked(true);
    }
}