我正在研究ViewPager并在其中使用Fragment


我正在使用支持库Fragment中的android.support.v4.app.Fragment
这是图书馆的问题吗?

我该如何摆脱呢?

编辑

我重写setUserVisibleHint(),而不是调用super来摆脱它。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    //FIXED: setUserVisibleHint() called before onCreateView() in Fragment causes NullPointerException
    //super.setUserVisibleHint(isVisibleToUser);
}

最佳答案

// create boolean for fetching data
private boolean isViewShown = false;

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getView() != null) {
        isViewShown = true;
        // fetchdata() contains logic to show data when page is selected mostly asynctask to fill the data
        fetchData();
    } else {
        isViewShown = false;
    }
}

使用isViewShown实例变量来决定是以onCreateView()还是setUserVisibleHint()提取数据。

下面的代码包含onCreateView()的逻辑:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.main_layout, container, false);

   // view initialization steps.......

   if (!isViewShown) {
        fetchData();
   }
   // do other stuff
}

此代码将解决您的问题。因为它解决了我的问题。 :)

该技巧将获取onCreateView()中的数据,以便直接从一页跳转到另一页,而当您滑动 View 时,它将从setUserVisibleHint()方法中获取数据。 :)

09-30 15:37
查看更多