选择选项卡片段时触发啥事件

Posted

技术标签:

【中文标题】选择选项卡片段时触发啥事件【英文标题】:What event is triggered when a tab fragment is selected选择选项卡片段时触发什么事件 【发布时间】:2014-07-21 03:22:23 【问题描述】:

我在活动中使用标签片段,并且操作栏承载标签。 我想要做的是,每当视图(由用户选择)中出现(或重新出现)片段时,我就开始做某事。在这种情况下,我不能使用片段的onResume,因为当用户选择另一个选项卡时,所有选项卡都不会真正“暂停”,因此不会调用onResume

我可以使用托管活动中的以下两个事件,但我不想要它们,因为我希望片段应该自己知道这个逻辑并完成那个任务。任何想法?谢谢。

  @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
        // When the given tab is selected, switch to the corresponding page in the ViewPager.
        mViewPager.setCurrentItem(tab.getPosition());
    

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
    

【问题讨论】:

onPuase() 和 onResume() 方法为 Activity 调用。你必须通过标签获取 Fragment。在 PagerAdapter 类上放一个标签并 findFragmentByTag(tagname) 并触发选定 Fragment 的事件。 在片段中尝试 setUserVisibleHint()。 See this answer 【参考方案1】:

如in this answer 所述,在片段中尝试 setUserVisibleHint()。当fragment在被选中的tab中时,setUserVisibleHint()会被调用为true,当fragment不是被选中的tab时,setUserVisibleHint()会被调用为false。这适用于我使用支持库。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) 
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser)
        Log.d("MyFragment", "Fragment is visible.");
    else
        Log.d("MyFragment", "Fragment is not visible.");

【讨论】:

启动时间所有片段都在获取这个带有 false 值的回调。无论如何,此回调不适用于应用启动时间。 这不是一个可靠的事件,它的行为基于操作系统版本。如果您需要支持旧版本,请不要使用它。【参考方案2】:

您可以覆盖setUserVisibleHint(boolean isVisibleToUser)onHiddenChanged (boolean hidden) 方法。

如果是setUserVisibleHint(boolean isVisibleToUser)isVisibleToUser=true 片段可见,isVisibleToUser=false 片段隐藏。

如果是onHiddenChanged (boolean hidden),如果是hidden:True fragment 现在被隐藏,如果不可见则为 false。

【讨论】:

【参考方案3】:

这个我没测试过,但是相信你可以使用Fragment的onHiddenChanged方法

来自文档:

当隐藏状态(由片段的 isHidden() 返回)发生变化时调用。

http://developer.android.com/reference/android/app/Fragment.html#onHiddenChanged%28boolean%29

【讨论】:

以上是关于选择选项卡片段时触发啥事件的主要内容,如果未能解决你的问题,请参考以下文章

选择选项卡或滑动页面时如何加载片段

Twitter Bootstrap 选项卡显示事件未在页面加载时触发

javascript 当用户激活另一个选项卡或窗口时触发事件

单击活动选项卡的选项卡事件

ViewPager2 selectCurrentItem - 选择选项卡,但在此选项卡内放置错误的片段

Android ActionBar 选项卡设置最初选择的选项卡