基于ArrayList <string>和TextView中的值比较,在RecyclerView中设置Switch的状态

时间:2018-01-31 19:01:24

标签: java android arraylist android-recyclerview

我有一个RecyclerView,显示当前安装在设备上的应用程序列表。每行包括应用程序的名称,其包名称和开关。当Switch isChecked时,包名称将添加到ArrayList中。如果用户单击该Activity,我需要重新填充列表并根据之前添加到ArrayList的内容设置开关的状态。

我必须实现的总体思路是将RecyclerView中的包名称与存储在ArrayList中的包名称进行比较,当匹配时,需要将该行的Switch设置为选中。

我不确定如何最好地完成这项工作。我认为它需要在使用适配器的Activity中完成,而不是适配器本身。我知道它也会涉及一个循环。

任何人都知道如何实现这个目标?

OP(2018年1月30日):https://coderanch.com/t/690164/mobile/Set-Switch-State-Based-Comparison

3 个答案:

答案 0 :(得分:1)

您可以像这样实现它: 您的适配器将被提交给具有

的ViewModel列表
String displayName;
String identifier;
boolean isChecked;

您的适配器可以通知监听器

interface AdapterListener {
    void onSwitchChanged(ViewModel viewModel);
}

我们的监听器可以是Presenter或ViewModel。您的监听器也可能管理您的所有ViewModel(因为他可能已创建或从另一个实例获取它们)。当您需要ArrayList时,可以

a)按需实例化(迭代你的ViewModel并提取被检查的那些)

b)您的监听器可以直接管理列表。您可以制作List<String>并添加/删除应用标识符。您无需循环,只需拨打list.remove("THEAPPIDKEY");,列表就会正确删除您要删除的密钥。

答案 1 :(得分:0)

我通常将Adapter类作为Activity类中的子类。这样,适配器可以访问属于Activity的字段。

在任何情况下,适配器必须知道它应显示为“已打开”的值。因此,如果您有一个单独的适配器类,则需要将ArrayList传递给适配器(例如,通过其构造函数)。

答案 2 :(得分:0)

将数据存储在自定义类中,并从中创建数组列表。将该列表传递给适配器后,您可以将值拉回。

class PhoneItem{
boolean switchState;
String blah;
String foo;
}
//get the data from the originating class
ArrayList<phoneItem>phones = new Arraylist();
mMySwitch.setChecked(phones.get(viewHolderCount).switchState);