在没有弹出/有效的情况下在PreferenceFragment中隐藏/显示首选项

时间:2019-03-04 13:12:53

标签: android preferencescreen

我们正在开发一个Android应用,该应用根据用户个人资料页面中的设置为用户提供不同的功能集。所选功能集也会对应用程序设置页面(显示更多或更少的设置)产生影响。如果用户点击设置页面,我们目前正在做什么:

  1. 通过ViewModel(从Room数据库)加载用户数据
  2. 用户数据可用后,立即检查功能集
  3. 遍历首选项,并检查对于该功能集是否应可见
  4. 如果偏好设置不可见,请将其从视图中删除,但将其保留在已删除的偏好设置列表中
  5. 如果用户更改,请重新添加所有首选项,并检查应该隐藏哪些偏好设置(请参阅3)

问题在于,在(2)中,当用户数据可用时,已经创建了视图,因此元素已经可见,并且在(3)中的检查过程中被删除。这会导致视觉上的“弹出”效果。

在步骤(2)中提供用户数据之前,我们无法决定是否应该显示首选项。

测试1-使用setVisible

我知道在v7中有一个setVisible()方法用于推理。但是,只能在(3)中使用setVisible方法,因此再次为时已晚。我可以在xml文件中设置不可见的首选项:

 app:isPreferenceVisible="false" 

无论如何,如果需要使它们可见,我们都必须使其可见,这只能在(3)中完成,这将导致弹出效果(而不是弹出)

测试2-操纵“首选项屏幕”

我尝试隐藏整个屏幕,直到处理首选项为止(然后使其可见)。但不幸的是

PreferenceScreen prefScreen = getPreferenceScreen();
prefScreen.setVisible(false);

在步骤(2)开始时完全没有效果。

测试3-访问视图

我尝试过类似的操作

View view = getView();
if(view != null)
    view.setVisibility(View.GONE);

但这也没有效果。

有人知道这个问题的解决方案吗?到目前为止我错过了任何方法或选项吗?

0 个答案:

没有答案