片段 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 未调用的主要内容,如果未能解决你的问题,请参考以下文章

检测片段内的 ViewPager 选项卡更改

检测片段内的 ViewPager 选项卡更改

片段中未调用 onActivityResult

替换片段后未调用 OnDestroyView 和 OnResume

片段中未调用 onSaveInstanceState

片段中未调用 onAttach()