我的应用程序的基本架构是我在ViewPager
的3个屏幕中显示加载屏幕,同时加载一些数据(3个屏幕的3个片段),当数据加载时,我显示3个新的片段,替换ViewPager
的所有屏幕中的旧片段。
root_frameview.xml (这包含viewpager每个屏幕中的片段): -
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root_view">
</FrameLayout>
现在,在ViewPager
的适配器类中,Fragment getItem(int position)
方法是: -
@Override
public Fragment getItem(int position) {
Fragment f = new Fragments();
pageFragments.add(f);//pageFragments is an ArrayList keeping track of all the added fragments
return f;
}
碎片类是
public static class Fragments extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.root_frameview, container, false);
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.replace(R.id.root_view, new LoadingFragment());//the loading page fragment
transaction.commit();
return rootView;
}
public void replace() {
FragmentTransaction transaction = getFragmentManager()
.beginTransaction();
transaction.replace(R.id.root_view, new LoadedFragment());//the loaded fragment
transaction.commit();
}
}
请注意,它有一个replace()
方法,我在加载数据时将其调用以将片段(加载页面 - LoadingFragment
)替换为另一个片段 - LoadedFragment
。
这是已加载的屏幕: -
看起来很好,对吧?但问题从这里开始: - 当我滑动到 TAB 2 并返回 TAB 1 时,会出现相同的加载屏幕,如图1所示。它甚至没有加载现在任何事情,只显示布局。我哪里错了?
答案 0 :(得分:1)
请通过简单地添加此代码
为视图寻呼机设置setOffscreenPageLimit pager.setOffscreenPageLimit(3);
对于视图页面,setOffscreenPageLimit默认为0,因此加载下一页。当您移动到tab3时,选项卡1将被终止,当您滑动到tab1时,它将再次调用on createview。这可以通过更改setOffscreenPageLimit
来解决