我正在研究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()
方法中获取数据。 :)