首页 文章

检测片段何时可见[重复]

提问于
浏览
21

这个问题在这里已有答案:

Why not a duplicate: 建议的帖子仅适用于viewpager,或者调用onResume时 .

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

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

请注意,我想继续使用.hide()和show(),并且我正在寻找一个监听器或一个onVisible来检查片段何时变得可见,而不是检查它是否可见的方法 .

3 回答

  • -2

    编辑:
    正如评论中指出的那样, 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)

    如果isVisibleToUseris设置为truethe片段应该显示 .

  • -1

    阅读方法: Fragment. isVisible()

    例:

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

    您可以在片段启动时向您的活动发送事件: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 );
    }
    

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

    对于像这样的事件总线库,这可能更容易

相关问题