我有一个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
答案 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);