选择选项卡片段时触发啥事件
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 当用户激活另一个选项卡或窗口时触发事件