android - 阻止 FragmentStatePagerAdapter 在下一个或上一个滑动 viewpager 时创建新 fragment

标签 android android-fragments xamarin xamarin.android fragmentstatepageradapter

我当前的 FragmentStatePagerAdapter 实现在每次被 viewpager 调用时都会创建新的 fragment 。

我想保存以前加载的 fragment 的状态,并希望重用它们。

我认为要实现这一点,我必须实现 InstantiateItem 但不清楚如何实现?

这是我的 FragmentStatePagerAdapter 代码

   using System.Collections.Generic;

     //using Android.App;
    using Android.Views;
     using Hollard.MLAM.Android.Fragments.Fna;
    using Object = Java.Lang.Object;
    using Android.Support.V4.App;




    public FnaFragmentPagerAdapter(FragmentManager fm)
        : base(fm)
    {
        _registeredFragments = new Dictionary<int, Fragment>();
    }

    public override Fragment GetItem(int position)
    {
        Fragment fragment = null;
        switch ((FnaStep)position)
        {
            case FnaStep.First:
                fragment = new FnaStep1Fragment();
                break;
            case FnaStep.Second:
                fragment = new FnaStep2Fragment();
                break;         
            case FnaStep.Third:
                fragment = new FnaStep3Fragment();
                break;         
            case FnaStep.Fourth:
                fragment = new FnaStep4Fragment();
                break;         
            case FnaStep.Fifth:
                fragment = new FnaStep5Fragment();
                break;
            case FnaStep.Sixth:
                fragment = new FnaStep6Fragment();
                break;
            default:
                break;
        }
        return fragment;
    }

    public override int Count
    {
        get { return PageCount; }
    }



    public Fragment GetRegisteredFragment(ViewGroup container, int position)
    {
        global::Android.Support.V4.App.Fragment fragment = null;
        if (!_registeredFragments.TryGetValue(position, out fragment))
        {
            InstantiateItem(container, position);
            _registeredFragments.TryGetValue(position, out fragment);
        }

        return fragment;
    }

}

public enum FnaStep
{
    First = 0,
    Second,
    Third,
    Fourth,
    Fifth,
    Sixth
}
}

请帮助我如何实现 FragmentStatePagerAdapter,以便它可以重用已经创建的 fragment 。

最佳答案

您应该保存 fragment 的实例,而不是每次都实例化它们。换句话说,而不是这一行

  fragment = new FnaStep1Fragment();

你应该使用

  fragment = _FnaStep1FragmentInstance;

这样 _FnaStep1FragmentInstance 在容器 Activity 的构造函数中被初始化。

关于android - 阻止 FragmentStatePagerAdapter 在下一个或上一个滑动 viewpager 时创建新 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34414123/

相关文章:

java - 使用列表为我的 RecyclerView 制作了一个自定义适配器

java - Android 子 Activity 导航中的 SlidingMenu

android - 如何在不替换的情况下将参数传递给 fragment ?

android - 如何实现 fragment 之间的水平滚动/滑动?

java - 类未找到异常 : Didn't find class "java.sql.SQLType" on path: DexPathList

android - Retrolambda 与 RealmList

java - Jacoco 在 Parceler 类上失败 - Android

c# - Xamarin - Resource.X 不包含 Y 的定义

java - Opencv 3.1.0 Android 隐藏相机预览

java - 如何在 C#/Xamarin 中使用带有 Android 钥匙串(keychain)私钥的 X.509 证书?