Android Fragments 从一个片段修改另一片段的视图

aor9mmx1  于 2023-06-23  发布在  Android
关注(0)|答案(1)|浏览(124)

我在片段中定义了一个SharedPreferences变量,该变量用于RecyclerView的适配器类。加载RecyclerView时,在MemeViewHolder类中检查一个条件:

private static final String REWARD_GRANTED_KEY = "reward_granted_nsfw";

if (mSharedPrefs.getBoolean(REWARD_GRANTED_KEY, false)) {
    adBtn.setVisibility(View.GONE);
    adSpace.setVisibility(View.VISIBLE);
} else {
    adBtn.setVisibility(View.VISIBLE);
    adSpace.setVisibility(View.GONE);
}

我面临的问题是这个片段是列表中的第二个片段。第一个片段也包含相同的代码(但其本身的密钥不同)。但是,第一个片段中的条件会立即执行,因为它是在启动时加载的。第二个片段出现了问题,因为直到我导航到该片段时才调用适配器类。结果,不执行上述代码块。因此,当我切换到第二个片段时,我最初看到adBtn可见性设置为VISIBLE。只有在滚动一点之后,条件才最终被执行,可见性根据SharedPreferences中的值更新。
我想知道是否有一个解决方案可以从这个片段(REWARD_GRANTED_KEY)中检索共享的首选项,并在第一个片段或主Activity中使用它。通过这个更改,我可以从Activity的Angular 修改片段的条件:

if (mSharedPrefs.getBoolean(REWARD_GRANTED_KEY, false)) {
    adBtn.setVisibility(View.GONE);
    adSpace.setVisibility(View.VISIBLE);
} else {
    adBtn.setVisibility(View.VISIBLE);
    adSpace.setVisibility(View.GONE);
}

此外,即使我从第一个片段或主Activity获得共享偏好,我如何修改第二个片段的视图而不首先实际加载第二个片段?
你能为这种情况提出一个解决方案吗?

cunj1qz1

cunj1qz11#

一种方法可以是使用notifyDataSetChanged()通知fragment的onResume()方法中的回收器视图-请参见这里。
类似但稍微好一点的方法是使用这个listener监听SharedPreferences的更改。
最好的方法是转移到例如共享视图模型,这将需要对您的方法进行整体返工。

相关问题