当选中一个标签页片段时,触发哪个事件?

16
我在一个活动中使用选项卡片段,并且操作栏托管选项卡。我想要做的是,每当一个片段在视图中出现(或重新出现)时(由用户选择),我就开始执行某些操作。在这种情况下,我不能使用片段的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) {
    }

在 Activity 中调用 onPuase() 和 onResume() 方法。您必须通过标签获取 Fragment。在 PagerAdapter 类中放置一个标签,并使用 findFragmentByTag(tagname) 查找选定的 Fragment 并触发事件。 - Ravi Kant
尝试在片段中使用setUserVisibleHint()。请参见此答案 - Doug Simonton
3个回答

42
尝试在片段中使用setUserVisibleHint(),如此答案所述。当片段在选定的标签中时,将使用true调用setUserVisibleHint(),当片段不是选定的标签时,将使用false调用setUserVisibleHint()。这对我来说在使用支持库时有效。
@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值。无论如何,此回调在应用程序启动时不起作用。 - kAmol
这不是一个可靠的事件,它的不同行为基于操作系统版本。如果你需要支持旧版本,请不要使用它。 - Placeable

8

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

  • setUserVisibleHint(boolean isVisibleToUser)的情况下,当片段可见时isVisibleToUser=true,当片段隐藏时isVisibleToUser=false

  • onHiddenChanged (boolean hidden)的情况下,如果片段已隐藏,则hidden:True,如果未可见,则为false。


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接