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

如何更改活动内的片段并保存状态

林和煦
2023-03-14

我有一个活动,将使用下面的方法动态添加片段。

FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
FragmentA fragmentA = new FragmentA();
transaction.add(R.id.fragment_container, fragmentA, "fragmentA");
    transaction.addToBackStack("fragmentA");
    transaction.commit();

FragmentA有一个文本视图。我的活动中有一个导航抽屉,我想根据在导航抽屉中单击的项目在片段(例如FragmentA、FragmentB和FragmentC)之间切换。当更改为另一个片段时,如何保存片段的状态。我已经实现了onSavedInstance(Bundle outState)和onActivityCreated(Bundle savedInstanceState),但savedInstanceState始终为空。当从FragmentB更改,然后从FragmentB更改回FragmentA时,我希望能够保存FragmentA的字段。

按下后退按钮时,我无法保存状态。看起来田地没有被保存。

正确的做法是什么?

共有3个答案

邰德业
2023-03-14

我在下面的链接中找到了一种保持每个片段状态的快速方法。

如何还原以前显示的片段?

我没有意识到FragmentTransaction有一个隐藏当前片段视图的方法和一个再次显示当前片段的方法。

郝昊东
2023-03-14

您可以使用SharePreferences将数据保存在FragmentA中,并在再次调用时读取它。另一个优点是,如果需要,可以在其他片段中读取保存在SharePreferences中的数据

片段上的有用链接;
-https://developer.android.com/training/basics/fragments/index.html

-http://www.vogella.com/tutorials/AndroidFragments/article.html

逑禄
2023-03-14

片段的onSaveInstanceState(Bundle outState)永远不会被调用,除非片段的活动调用它自己和附加的片段。因此,在某些东西(通常是旋转)强制活动到SaveInstanceState并稍后恢复它之前,不会调用此方法。

所以在createView中,你可以做这样的事情...

Bundle mySavedInstanceState = getArguments();
 String value = mySavedInstanceState.getString(KEY);

...

在onPause()方法中保存值

@Override
    public void onPause() {
        super.onPause();
        String value = //get value from view;

        getArguments().putString(KEY, value);
    } 
 类似资料:
  • 问题内容: 我想将自己更改为我尝试过的内容,但无法将我的活动更改为片段。有人可以告诉我该怎么做吗?在哪里编辑我是Android上的新手。请告诉我和在此先感谢 这是我的活动: 问题答案: 只要了解一些步骤,您就可以现在和将来轻松地将Activity转换为Fragment ..: 首先,不要扩展,只要扩展.. 例如: 然后覆盖.. 然后通过LayoutInflater扩展布局,并分配给进一步用于子视图

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

  • 在我的应用程序中,fragment活动包含两个片段,片段A和片段B,fragment B是一个包含3个片段的视图分页器。 在我的活动中,为了防止在配置更改时重新创建片段: 片段B的代码: 显然,在每次轮换时都要这样做: 这会导致整个寻呼机被重新创建,对吗?结果是 将在每次循环时被调用,碎片将从头创建并失去状态: 在中,但其结果是,在循环时,页面中的片段被移除。 有什么想法如何正确地保留在寻呼机内的

  • 我有一个HomeActivity,我从中调用片段列表。在HomeActivity中,我有一个侧菜单,其中加载了所有片段。 现在,在这个列表中,我有一个名为HomeFraank的片段,它使用webservice显示带有数据的Google地图。 我想要的是我想加载Map dat只加载一次(第一次)片段,而不是每次单击sidemenu或从任何其他片段进来时。 我的HomeFragment或任何其他片段会

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 我有一个显示列表的导航抽屉和一个显示内容的视页。当单击导航抽屉上列表中的特定项目时,将为所有页面生成一个URL,该URL将导致视图分页程序内容的更改。导航抽屉和查看页处于相同的活动中。view pager中的片段具有从服务器检索内容的URL。我怎样才能找到它? 下面是一些代码: 查看页有三页。适配器如下: 这些页面都有一个URL字段,用于从包含数据的服务器中提取json。所以简而言之,问题是当导航