我当前的 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/