片段变得可见

时间:2013-01-07 10:28:16

标签: android

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

  1. 在onStart
  2. onResume
  3. onAttach
  4. 但是我的代码每次都不会触发。

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

5 个答案:

答案 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年前就已经开始了 - 它已经不存在了