每次我的片段对用户可见时,我都想执行一段代码来调用 Web 服务,获取一些数据并将其显示在屏幕上。我得到了网络服务部分等工作,但不确定在什么情况下我必须添加我的代码....我试过:
- 开始
- 恢复
- 附加
但是我的代码不会每次都触发。
我正在使用带有 SherlockFragment 的 Android v4 comp lib 作为我的基类。
每次我的片段对用户可见时,我都想执行一段代码来调用 Web 服务,获取一些数据并将其显示在屏幕上。我得到了网络服务部分等工作,但不确定在什么情况下我必须添加我的代码....我试过:
但是我的代码不会每次都触发。
我正在使用带有 SherlockFragment 的 Android v4 comp lib 作为我的基类。
You can use
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
Have a look at this
这可能很老了,但我发现 setUserVisibleHint() 不适用于我的许多用例。相反,我不得不求助于使用 ViewTreeObserver 的 hack。
基本上,在您的片段初始化后,您会在其中获得一个视图并执行以下操作:
myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myMethodWhenFragmentFirstBecomesVisible();
myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
onCreateView()
每次更改 Fragment 并且新的 Fragment 变得可见时调用..
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
下面的方法用于确定 Fragment 何时在用户面前可见。
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;
}
}}
onResume()
每次您的片段对用户可见时都会调用。如果没有,您的代码还有其他问题
onCreateView()
在片段第一次需要绘制其 UI 时调用
更新:这个被接受的答案在 5 年前有效 - 现在不再适用