java - 根据 ArrayList<String> 和 TextView 中的值比较设置 RecyclerView 中的开关状态

标签 java android arraylist android-recyclerview

我有一个 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/

相关文章:

java - 如何使用 Android 从 Firebase 迭代检索数据?

java - 如何使用普通的 For 循环打印动态数组

Java Reflect/AOP 覆盖父类(super class)型私有(private)方法

java - 对于 GF4 和 Jackson,未找到 Media type=application/json 的 MessageBodyWriter

android - 在 Google Play Developer API 中使用旧 token 查询 Purchases.subscriptions

android ndk jni No implementation found 错误

android - 每次单击按钮时,如何使用自定义适配器将项目添加到 ListView ?

java - ArrayList用不同的数据类型初始化

Java 表达式语言 : Interpolation?

java - Frame.getContentPane().setBackground(Color.black) 没有