片段 isVisible() 不成立时为真
Posted
技术标签:
【中文标题】片段 isVisible() 不成立时为真【英文标题】:Fragment isVisible() true when not 【发布时间】:2013-10-25 02:39:40 【问题描述】:我有一个带有片段容器和两个片段的活动,如“列表片段 -> 详细片段”
private boolean isFirstFragmentAdded()
return getSupportFragmentManager().findFragmentByTag("FIRST_FRAGMENT_TAG") != null;
private boolean isFirstFragmentVisible()
return getSupportFragmentManager().findFragmentByTag("FIRST_FRAGMENT_TAG").isVisible();
private boolean isSecondFragmentAdded()
return getSupportFragmentManager().findFragmentByTag("SECOND_FRAGMENT_TAG") != null;
private boolean isSecondFragmentVisible()
return getSupportFragmentManager().findFragmentByTag("SECOND_FRAGMENT_TAG").isVisible();
private void addFirstFragment()
firstFragment = new FirstFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment, "FIRST_FRAGMENT_TAG").commit();
private void showFirstFragment()
firstFragment = new FirstFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, firstFragment, "FIRST_FRAGMENT_TAG").commit();
private void addSecondFragment()
secondFragment = new SecondFragment();
getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, secondFragment, "SECOND_FRAGMENT_TAG").commit();
private void showSecondFragment()
secondFragment = new SecondFragment(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, secondFragment, "SECOND_FRAGMENT_TAG").commit();
private void refreshVisibleFragment()
if (isFirstFragmentAdded() && isFirstFragmentVisible())
refreshFirstFragment();
else if (isSecondFragmentAdded() && isSecondFragmentVisible())
refreshSecondFragment();
问题是即使我的第二个片段可见,第一个片段总是返回isVisible() == true
,所以第二个片段永远不会刷新。已经尝试删除、分离,但没有任何效果:第一个片段始终显示为已添加且可见。还在平板电脑和手机上测试它,同样的事情也会发生。也许我遗漏了一些东西,但无法正确处理,因此我们将不胜感激。谢谢
【问题讨论】:
添加第二个fragment时,是使用add还是也尝试过替换当前fragment? isVisible():如果片段当前对用户可见,则返回 true。这意味着它:(1) 已添加,(2) 其视图已附加到窗口,并且 (3) 未隐藏。检查片段的隐藏状态,如下所述:developer.android.com/reference/android/app/… 并调用 isHidden() 方法。 要替换片段,我询问它是否已经添加,如果添加则调用replace(),如果不调用add()。第一个片段的 isHidden() 状态为假,而对用户不可见,可见片段是第二个 如果 isHidden() 返回 false,那么根据文档,isVisible() 将返回 true。检查为什么第一个片段没有隐藏和/或如何以编程方式将其设置为隐藏。 已修复。问题是我将 2 firstFragment 添加到 fragmentManager 中,所以当调用 replace() 时,片段没有被删除,可见性状态永远不会从 true 改变(不知道为什么,我想 coz 是 2 具有相同的标签但逻辑是 2 已被删除)现在我设法在管理器中始终只有 1 个片段,所以它工作正常。无论如何,支持库中的 fragmentManager 有一些奇怪的东西,或者我在文档中弄错了。感谢@fasteque 的时间和帮助 【参考方案1】:试试
fragment.isMenuVisible()
而不是在设置fragment.setMenuUserVisibility(false)
之后
【讨论】:
以上是关于片段 isVisible() 不成立时为真的主要内容,如果未能解决你的问题,请参考以下文章