当 ViewPager 中的片段出现和消失时如何执行一些代码

Posted

技术标签:

【中文标题】当 ViewPager 中的片段出现和消失时如何执行一些代码【英文标题】:How to do some code when fragments in a ViewPager appear and disappear 【发布时间】:2019-05-20 08:06:22 【问题描述】:

在我的 android 应用程序中,我使用带有 Fragments 的 ViewPager,并且我想在 Fragment 出现(当用户可以看到它时)和 Fragment 消失时(当用户停止看到 Fragment 时)运行一些代码

我试图覆盖 onPause(), onResume() 但是没有出现在 UI 中的 Fragments 无论如何都会运行这些方法(我认为这些方法在创建 Fragment 时运行。)

@Override
public void onPause() 
    Log.i(TAG, "====onPause - " + phrase.getPhrase());
    super.onPause();


@Override
public void onResume() 
    Log.i(TAG, "====onResume - " + phrase.getPhrase());
    super.onResume();

我只想在片段在 UI 中出现和消失时运行一些代码。 但在我的情况下,每个新页面都会创建这个:

====onPause - 我要你送汤姆去学校。 ====onResume - 我可以和你谈谈吗,汤姆? ====onPause - 我知道汤姆想和你谈谈。 ====onPause - 我可以和你谈谈吗? ====onPause - 我可以和你谈谈吗,汤姆? ====onResume - 我知道汤姆想和你谈谈。 ====onResume - 我可以和你谈谈吗? ====onResume - 我可以和你谈谈吗,汤姆?

【问题讨论】:

你可以使用viewpager适配器的OnPageChangeListener 【参考方案1】:

您可以使用以下方法:-

override fun setUserVisibleHint(isVisibleToUser: Boolean) 
    super.setUserVisibleHint(isVisibleToUser)
    if(isVisibleToUser)
     // do something
      


【讨论】:

【参考方案2】:

我这样解决了我的问题:

  @Override
    public void setUserVisibleHint(boolean isVisibleToUser) 

        if(phrase != null)
            if(isVisibleToUser)
                Log.i(TAG, "setUserVisibleHint" + phrase.getPhrase()+ "|isVisibleToUser " + isVisibleToUser);
            else 
                Log.i(TAG, "setUserVisibleHint" + phrase.getPhrase()+ "|isVisibleToUser " + isVisibleToUser);
            
        

【讨论】:

以上是关于当 ViewPager 中的片段出现和消失时如何执行一些代码的主要内容,如果未能解决你的问题,请参考以下文章

当我导航回片段时,片段的内容消失了

切换页面后标签内容消失

滑动 ViewPager 时如何清除片段相关状态

在ViewPager上,在onPageSelected上的片段上启动动画

选择片段 A 时如何在 ViewPager 上不一起启动所有片段

ViewPager2 中的片段在返回父片段时被重新创建