setUserVisibleHint方法在onCreateView方法之前调用,并且在第一次加载时不起作用

时间:2017-03-13 17:57:22

标签: android android-fragments android-viewpager

我正在使用这种方法,但它不适用于第一个片段,但是从第二个片段到第一个片段时,它工作正常。请帮帮我。 感谢

 @Override
     public void setUserVisibleHint(boolean isVisibleToUser) 
   {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser){   //do Something 
       }
     }

3 个答案:

答案 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。请在此处查看投票最高的答案。 希望它能帮助所有未来的访客并节省他们的时间。