替换的片段重新出现在ViewPager中

时间:2015-09-11 10:56:33

标签: android android-fragments

我的应用程序的基本架构是我在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

现在出现问题,

这是加载屏幕: -
enter image description here

这是已加载的屏幕: - enter image description here
看起来很好,对吧?但问题从这里开始: - 当我滑动到 TAB 2 并返回 TAB 1 时,会出现相同的加载屏幕,如图1所示。它甚至没有加载现在任何事情,只显示布局。我哪里错了?

1 个答案:

答案 0 :(得分:1)

请通过简单地添加此代码

为视图寻呼机设置setOffscreenPageLimit
 pager.setOffscreenPageLimit(3);

对于视图页面,setOffscreenPageLimit默认为0,因此加载下一页。当您移动到tab3时,选项卡1将被终止,当您滑动到tab1时,它将再次调用on createview。这可以通过更改setOffscreenPageLimit

来解决