当前位置: 首页 > 知识库问答 >
问题:

动态删除片段并保存其UI转换

孟祯
2023-03-14

我有两个片段,一个替换另一个。这些片段的UI发生了变化,我需要保持它的新状态。所以代码看起来很简单:

    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();

    if (mStepTwo == null) {
        mStepTwo = new QuizStepTwo();
        mStepTwo.setListener(mStepTwoListener);
    } else {
        fragmentTransaction.remove(mStepTwo);
    }

    fragmentTransaction.replace(R.id.step_holder, mStepTwo);
    fragmentTransaction.addToBackStack("second_step");

    fragmentTransaction.commit();

然而,当我用第一个步骤替换第二个步骤时,例如按下后退按钮,它的UI状态回滚到初始状态。

我该如何保持状态?OnSaveInstanceState?还是更舒适的?

类似问题:标签主机中的Android片段视图状态,如何恢复Android片段视图状态

共有3个答案

公良鸿风
2023-03-14

如果状态取决于您的应用程序数据,最好将它们保存在SharedPretions文件中并使用它来构建UI元素。

慕永年
2023-03-14

这个问题(及其解决方案)看起来与您试图做的事情类似。

然而,我可以想到的另一种解决方案是,不要用第二个片段替换第一个片段,而是将其隐藏(使用fragmentTransaction.hide()),或者分离。这样,当用户按BACK键时,片段将显示,其状态将保持完整。它可能需要更多的内存,但仍然可以工作,因为片段不会被销毁。

聂翼
2023-03-14

我没有用过这个,所以里程可能会有所不同。您可以尝试使用碎片管理器。saveFragmentInstanceState方法在替换片段时,然后使用片段。恢复片段时的setInitialSavedState方法。从文档中可以看出,它可能只在生成相同类型的新片段时才起作用,因此不确定这是否适用于您当前的实现。

 类似资料:
  • 当我创建时,我需要从另一个活动中删除一个片段,而不是创建它的活动: 然后我可以从片段中访问另一个活动,假设片段中有一个按钮可以打开另一个活动,现在,停留在该活动中我想删除启动该活动的片段,我得到该片段的参考号通过意图。所以我尝试: 但它给了我一个nullPointerException, 03-07 22:42:33.270 30993-30993/河马。rggmiranda。hiposleep

  • 如何从堆栈中弹出特定片段,并从片段中删除其他片段?例如,这些是我的片段,我现在在E right know。 A- 想从E回到B,清除C和D。我怎么能做到这一点?

  • 我有一个活动,将使用下面的方法动态添加片段。 FragmentA有一个文本视图。我的活动中有一个导航抽屉,我想根据在导航抽屉中单击的项目在片段(例如FragmentA、FragmentB和FragmentC)之间切换。当更改为另一个片段时,如何保存片段的状态。我已经实现了onSavedInstance(Bundle outState)和onActivityCreated(Bundle savedI

  • 我有一个活动和两个片段。片断a和片断b。 我需要实现像,最初碎片应该在那里。在之后,单击FragmentB应该在那里。 我的第二段代码:

  • 我搜索了很多信息,但没有一个明确的。有人能给出一个明确的解决方案和一个例子吗?

  • 我有4个按钮来替换活动中的片段[片段A,片段B,片段C,片段D],然后我将片段A替换为活动,然后我将片段A中的值更改为片段A,之后我将片段B替换为片段A,并将片段C替换为片段B.但是我想把片段A替换成片段C。如何在片段A中保存状态。 当我提交片段时编写代码 要替换的图表 片段A ------- 片段B ------- 片段C ------- PS.我不想使用返回按钮返回片段A,我想替换片段A并在第