检测片段何时可​​见

时间:2014-02-12 16:12:17

标签: android android-fragments

为什么不重复:建议的帖子仅适用于viewpager,或者调用onResume时。

我有一个listfragment和一个detailfragment。单击列表项时将打开详细信息片段。我通过隐藏listfragment并显示detailfragment来实现这一目标。当用户返回时,他返回到listfragment。

如何检测用户何时返回我的片段,或者我的片段何时可​​见?

请注意我想继续使用.hide()和show()以及我正在寻找一个监听器或onVisible来检查 片段成为可见,而不是检查 是否可见的方法。

3 个答案:

答案 0 :(得分:24)

编辑:
正如评论中指出的那样,setUserVisbileHint()不会被自动调用,而是在ViewPager中使用FragmentPageAdapter。

对于问题中描述的方案,onHiddenChanged(boolean hidden) http://developer.android.com/reference/android/app/Fragment.html#onHiddenChanged(boolean)是合适的 如文档中所述,每次Fragments隐藏状态更改时都会调用该方法,但不会在Fragment的初始设置中调用。


您可以使用setUserVisibleHint() http://developer.android.com/reference/android/support/v4/app/Fragment.html#setUserVisibleHint(boolean)

如果isVisibleToUser设置为true,则应显示片段。

答案 1 :(得分:-1)

了解该方法: Fragment. isVisible()

示例:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentById("myFragnmentID");
if (test != null && test.isVisible()) {
     //VISIBLE! =)
}
else {
    //NOT VISIBLE =(
}

答案 2 :(得分:-2)

您可以在片段启动时向活动发送事件: https://www.inkling.com/read/programming-android-mednieks-1st/chapter-11/visualizing-the-fragment-life

通过覆盖onStart方法:

@Override
public void onStart() {
    super.onStart();
    ((MyInterface)getActivity()).onFragmentIsVisible( this );
}

MyInterface是一个接口:

public MyInterface {
   public void onFragmentVisible( Fragment fragment );
}

并且您的活动必须实施它。

使用像

这样的事件总线库可以更容易