【问题标题】:Current Fragment null after switching mode from FragmentStatePagerAdapter /Get Current Fragment从 FragmentStatePagerAdapter 切换模式后当前 Fragment null /Get Current Fragment
【发布时间】:2021-01-25 04:44:20
【问题描述】:

我在切换模式或暗/亮模式后返回时遇到问题,然后当前片段为空。我想在切换模式/重新创建活动后取回我当前的片段(不是新片段)。我正在使用 FragmentStatePagerAdapter。我已经尝试过使用 InstantiateItem 方法like this。但我发现该方法创建了一个新片段。并且使用 SetRetainInstance 但是,我认为 SetRetainInstance 不是最好的方法。我已经在搜索信息,但仍然没有得到它。我正在使用 GetItem 来声明适配器内的片段。目前我有 3 个标签/3 个片段。

public override Fragment GetItem(int position)
    {
        switch (position)
        {
            case 1:
                if (fragment1 == null)
                {
                    fragment1 = new FragmentOne(_parentActivity);
                }
                else
                {
                    fragment1.RefreshPage();
                }
                return fragment1;

            case 2:
                if (fragment2 == null)
                {
                    fragment2 = new FragmentTwo(_parentActivity);
                }
                return fragment2;

            case 3:
                if (fragment3 == null)
                {
                    fragment3 = new FragmentThree(_parentActivity);
                }
                else
                {
                    fragment3.fragment3Adapter.UpdateData();
                }
                return fragment3;

            default:
                throw new Exception("Unrecognized fragments!!!");
        }
    }

然后,在 Activity 中,我使用 OnPageSelected(position) 来获取/了解选定的选项卡/单击的选项卡。

 public void OnPageSelected(int position)
    {
        if (position == 1)
        {
            fragmentAdapter.RefreshPage();
        }
        else if (position == 3)
        {
            fragmentAdapter.fragment3.UpdateData();
        }
    }

不,在 OnPageSelected 中,我的 Fragment3 为空,但适配器不为空(fragmentAdapter.fragment3.UpdateData();)。仅供参考,我不使用 FragmentTransaction 来切换/获取我的片段。那么,有没有办法在不创建新片段的情况下获取当前片段?请帮我!谢谢!

【问题讨论】:

  • 可以吗?

标签: android android-fragments xamarin.android fragmentstatepageradapter


【解决方案1】:

我认为这是使用FragmentStatePagerAdapter 的原因。

继承自PagerAdapter,这个PagerAdapter实现只会保留当前页面,当页面看不见时,会被移除,释放资源。

如果您只需要少量的固定片段,FragmentPagerAdapter 是一个安全且合适的选择。

因此您可以尝试使用FragmentPagerAdapter 进行更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多