为什么不重复:建议的帖子仅适用于viewpager,或者调用onResume时。
我有一个listfragment和一个detailfragment。单击列表项时将打开详细信息片段。我通过隐藏listfragment并显示detailfragment来实现这一目标。当用户返回时,他返回到listfragment。
如何检测用户何时返回我的片段,或者我的片段何时可见?
请注意我想继续使用.hide()和show()以及我正在寻找一个监听器或onVisible来检查 片段成为可见,而不是检查 是否可见的方法。
答案 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 );
}
并且您的活动必须实施它。
使用像
这样的事件总线库可以更容易