每次我的片段对用户可见时,我想执行一个代码来调用Web服务,获取一些数据并在屏幕上显示。我得到了Web服务部分等工作,但不确定在什么情况下我必须添加我的代码....我试过:
但是我的代码每次都不会触发。
使用带有SherlockFragment的Android v4 comp lib作为我的基类。
答案 0 :(得分:12)
您可以使用
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
查看this
答案 1 :(得分:3)
这可能很老但我发现setUserVisibleHint()对我的许多用例都没有用。相反,我不得不使用ViewTreeObserver来解决问题。
基本上,在您的片段初始化之后,您会在其中获得一个视图并执行以下操作:
myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myMethodWhenFragmentFirstBecomesVisible();
myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
答案 2 :(得分:2)
onCreateView()
调用每次更改片段时,新片段都会变为可见..
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
答案 3 :(得分:1)
使用以下方法确定片段在用户前面何时可见。
private boolean loding= false; // your boolean flage
@Override
public void setUserVisibleHint(boolean isFragmentVisible) {
super.setUserVisibleHint(true);
if (this.isVisible()) {
// we check that the fragment is becoming visible first time or not
if (isFragmentVisible && !loding) {
//Task to doing while displaying fragment in front of user
loding = true;
}
}}
答案 4 :(得分:-17)
onResume()
。如果代码没有
onCreateView()
在片段第一次需要绘制其UI时调用
更新:这个接受的答案在5年前就已经开始了 - 它已经不存在了