4

每次我的片段对用户可见时,我都想执行一段代码来调用 Web 服务,获取一些数据并将其显示在屏幕上。我得到了网络服务部分等工作,但不确定在什么情况下我必须添加我的代码....我试过:

  1. 开始
  2. 恢复
  3. 附加

但是我的代码不会每次都触发。

我正在使用带有 SherlockFragment 的 Android v4 comp lib 作为我的基类。

4

5 回答 5

12

You can use

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) { }
    else {  }
}

Have a look at this

于 2014-01-10T07:56:07.370 回答
3

这可能很老了,但我发现 setUserVisibleHint() 不适用于我的许多用例。相反,我不得不求助于使用 ViewTreeObserver 的 hack。

基本上,在您的片段初始化后,您会在其中获得一个视图并执行以下操作:

myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            myMethodWhenFragmentFirstBecomesVisible();
            myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
}
于 2016-02-04T23:19:39.183 回答
2

onCreateView()

每次更改 Fragment 并且新的 Fragment 变得可见时调用..

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
于 2013-01-07T10:31:45.973 回答
2

下面的方法用于确定 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;         
    }
}}
于 2017-11-07T06:00:32.763 回答
-17

onResume()每次您的片段对用户可见时都会调用。如果没有,您的代码还有其他问题

onCreateView()在片段第一次需要绘制其 UI 时调用

更新:这个被接受的答案在 5 年前有效 - 现在不再适用

于 2013-01-07T10:39:25.610 回答