我有一个 RecyclerView,它显示设备上当前安装的应用程序列表。每行包括应用程序的名称、其包名称和一个开关。当 Switch 被选中时,包名称将被添加到 ArrayList 中。如果用户单击返回该 Activity,我需要重新填充列表并根据之前添加到 ArrayList 的内容设置 Switch 的状态。
我必须实现这一目标的总体想法是将 RecyclerView 中的包名称与 ArrayList 中存储的包名称进行比较,当存在匹配时,需要将该行的 Switch 设置为检查。
我不知道如何最好地实现这一点。我认为这需要在使用适配器的 Activity 中完成,而不是适配器本身。我知道它也会涉及一个循环。
有人知道如何实现这一目标吗?
OP(2018 年 1 月 30 日):https://coderanch.com/t/690164/mobile/Set-Switch-State-Based-Comparison
最佳答案
你可以这样实现: 您的适配器将收到具有
的 ViewModel 列表String displayName;
String identifier;
boolean isChecked;
您的适配器可以通知监听器
interface AdapterListener {
void onSwitchChanged(ViewModel viewModel);
}
我们的监听器可以是 Presenter 或 ViewModel。您的监听器还可能管理您的所有 ViewModel(因为他可能已创建它们或从另一个实例获取它们)。当你需要ArrayList时,你可以
a) 根据需要实例化它(迭代您的 ViewModel 并提取已检查的 View 模型)
b) 您的监听器可以直接管理列表。你可以做一个List<String>
并添加/删除应用程序标识符。不需要循环,直接调用list.remove("THEAPPIDKEY");
即可并且列表将正确删除您要删除的 key 。
关于java - 根据 ArrayList<String> 和 TextView 中的值比较设置 RecyclerView 中的开关状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48549574/