【发布时间】:2017-05-17 07:50:09
【问题描述】:
我在我的 Android 项目中使用 ViewPager,我使用 FragmentStatePagerAdapter 来设置页面。
class MyPageAdapter extends FragmentStatePagerAdapter {
List<Fragment> mList = new ArrayList<>();
public MyPageAdapter(FragmentManager fm) {
super(fm);
this.init();
}
private void init() {
mList.add(new FragmentOne());
mList.add(new FragmentTwo());
mList.add(new FragmentThree());
....
}
@Override
public Fragment getItem(int position) {
return mList.get(position);
}
}
一旦创建视图,每个Fragment 数据将从服务器加载,如下所示:
public class FragmentOne extends Fragment {
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(getViewResourceId(), container, false);
ButterKnife.bind(this, v);
setRetainInstance(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
mRecycleView.setLayotManager(linearLayoutManager);
endlessRecyclerViewScrollListener = new EndlessRecyclerViewScrollListener((LinearLayoutManager) mRecycleView.getLayoutManager()) {
@Override
public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
loadByPage(page);
}
};
mRecycleView.addOnScrollListener(endlessRecyclerViewScrollListener);
return v;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mAdapter = createAdapter();
mRecycleView.setAdapter(mAdapter);
loadByPage(1); // load data from server
}
}
如图所示,Fragment 包含一个无限循环视图。
到目前为止一切顺利。但是一旦我改变了选中的视图页面,我发现每次都会重新加载数据。比如我在FragmentOne滚动了3页,然后换成FragmentTwo,当我换回FragmentOne时,FragmentOne会尝试加载第1页的数据。
是否可以避免这种情况?
【问题讨论】:
-
您应该在 onCreateView 之前加载数据,例如在 onCreate 中,因为每次显示片段时,onCreateView 都会开始运行。检查片段生命周期:developer.android.com/guide/components/fragments.html
-
或者你可以检查 if(adapter==null){ load data } else{ fetchdata}
-
你解决了吗?
标签: android android-viewpager fragment