我正在使用这种方法,但它不适用于第一个片段,但是从第二个片段到第一个片段时,它工作正常。请帮帮我。 感谢
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser){ //do Something
}
}
答案 0 :(得分:1)
这是它的工作方式
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
//inflate view layout
view =inflater.inflate(R.layout.your_fragment, container, false);
// return view
return view;
}
并使用此
@Override
public void setUserVisibleHint(boolean isUserVisible)
{
super.setUserVisibleHint(isUserVisible);
// when fragment visible to user and view is not null then enter here.
if (isUserVisible && view != null)
{
onResume();
}
}
并在onResume中放入此代码
@Override
public void onResume() {
super.onResume();
if (!getUserVisibleHint()) {
return;
}
//do your stuff here
}
答案 1 :(得分:0)
使用支持版本时,您真的不应该依赖于调用setUserVisibleHint
的顺序。来自docs:
注意:可以在片段生命周期之外调用此方法。因此没有关于片段生命周期方法调用的排序保证。
类似的question有一些方法。
答案 2 :(得分:0)
当我在viewPager Fragments上加载数据时以及在它们可见时我都遇到了这个问题。要仅在特定片段可见时加载数据,我依靠
setUserVisibleHint(isVisibleToUser:Boolean)
却没有意识到在片段生命周期中的什么时刻。
结果,我一整天都一无所知,为什么我的所有变量(在onCreateView()
中出现)都是空的。只有经过一些堆栈回答之后,我才意识到我犯了一个错误
setUserVisibleHint()
甚至在调用onCreateView()之前被调用。
因此解决方法是this。请在此处查看投票最高的答案。 希望它能帮助所有未来的访客并节省他们的时间。