片段 onHiddenChanged 未调用
Posted
技术标签:
【中文标题】片段 onHiddenChanged 未调用【英文标题】:Fragment onHiddenChanged not called 【发布时间】:2012-03-24 07:49:36 【问题描述】:我最近在我的应用程序中添加了 Fragments。对于一个新的应用程序,我需要得到 显示我的片段后立即通知。所以我可以尽快做一些计算 片段再次显示。
我的 Fragment 与 TabIndicator 一起使用,它只是一个使用的 FragmentClass 几次。
这是正常的标准覆盖类:
@Override
public void onHiddenChanged(boolean hidden)
super.onHiddenChanged(hidden);
【问题讨论】:
【参考方案1】:我有同样的问题。
我对片段 (Building a Flexible UI) 使用了标准指导实践工作。 我有两个片段(ListItemsFragment 和 InfoItemFragment)。 当使用正常屏幕尺寸时,我将 ListItemsFragment 替换为 InfoItemFragment 和 onHiddenChanged 方法不会自动调用。
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
我认为我们必须调用隐藏方法 FragmentTransaction。例如:
ListItemsFragment mListItemsFragment;
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
if (mListItemsFragment != null)
mFragmentTransaction.hide(mListItemsFragment);
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
现在 onHiddenChanged 方法工作正常。当用户再次单击返回按钮时,mListItemsFragment 会显示并且方法 onHiddenChanged 会自动调用。
在文档中说: 每当片段改变状态时都会调用它
我认为我们必须手动更改值然后调用方法。
【讨论】:
【参考方案2】:还在寻找答案?第一次显示片段时不会调用 onHiddenChanged 。只有当它改变状态时。
来自文档:
当片段的隐藏状态(由 isHidden() 返回)改变时调用。片段开始时没有隐藏;每当片段改变状态时,都会调用它。
【讨论】:
感谢您的回答,但从未调用过该方法。所以我解决了这个问题,因为我的 viewpager 有一个监听器。在这个监听器中,我调用 onHidden-Changed 方法。愚蠢,但是,它现在可以工作了。 它从未被调用过。【参考方案3】:您可以使用 setUserVisibleHint 方法来解决一些类似的问题。希望对你有帮助。
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser)
// Do some your work
else
// Do your Work
【讨论】:
已弃用! 你的 SDK 版本是多少?安卓X? compileSdkVersion 28, minSdkVersion 17 & androidX【参考方案4】:如果您使用 hide() 和 show() 隐藏或显示您的片段,任何生命周期方法都不起作用。所以 setUserVisibleHint() 。
【讨论】:
以上是关于片段 onHiddenChanged 未调用的主要内容,如果未能解决你的问题,请参考以下文章