我的活动会使用以下方法动态添加片段。
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
FragmentA fragmentA = new FragmentA();
transaction.add(R.id.fragment_container, fragmentA, "fragmentA");
transaction.addToBackStack("fragmentA");
transaction.commit();
FragmentA有一个TextView。我的活动上有一个导航抽屉,想要在片段之间切换(例如FragmentA,FragmentB和FragmentC),具体取决于导航抽屉中单击的项目。如何在更改为另一个片段时保存片段的状态。我已实施onSavedInstance(Bundle outState)
和onActivityCreated(Bundle savedInstanceState)
,但savedInstanceState
始终为空。我希望能够在从FragmentB更改然后从FragmentB更改回FragmentA时保存FragmentA的字段。
按下靠背时,我无法保存状态。看起来这些字段没有被保存。
这样做的正确方法是什么?
答案 0 :(得分:0)
您可以使用SharePrefrences在FragmentA中保存数据,并在再次调用时读取它。另外一个优点是,如果需要,可以在其他片段中读取保存在SharePreferences中的数据。
碎片上的有用链接;
- https://developer.android.com/training/basics/fragments/index.html
- http://www.vogella.com/tutorials/AndroidFragments/article.html
答案 1 :(得分:0)
片段的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);
}
答案 2 :(得分:0)
我找到了一种快速方法来维护下面链接中每个片段的状态。
How do I restore a previously displayed Fragment?
我没有意识到FragmentTransaction有一个隐藏当前片段视图的hide()
方法和一个show()
方法来再次显示它。