【问题标题】:android, retain and restore Fragment state after replaceandroid,retain and restore Fragment state after replace
【发布时间】:2015-03-18 07:16:44
【问题描述】:

我有一个托管 2 个片段的活动,但我不使用 viewpager。我的做法如下。当我从 Fragment1 移动到 Fragment2 时,我看到 Fragment1 的 onSaveInstanceState 被调用。但是,当我从 Fragment2 移回 Fragment1 时,onCreate()onCreateView() 被调用,且 savedInstanceState 为 null。 我已经在片段的onCreate() 中尝试了setRetainState(true)。我错过了什么?谢谢。

P.S:SO 有一个标记为重复的问题 Saving Fragment's state after replacing Fragment 但原来的问题不再存在。

switch (event.option) {
            case 1:
                getSupportActionBar().show();
                if (frag1 == null)
                    frag1 = new Fragment1();
                fragmentManager.beginTransaction().replace(R.id.v4_main_content, frag1).commit();
                break;
            case 2:
                getSupportActionBar().hide();
                if (frag2 == null)
                    frag2 = new Fragment2();
                fragmentManager.beginTransaction().replace(R.id.v4_main_content, frag2).commit();
                break; 
}

更新:注释中要求的代码,Fragment1()中的函数

@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        // Save near location
        outState.putParcelable(KEY_NEAR_LOCATION, mNearLocation);
        outState.putLong(KEY_SELECTED_TIME_IN_MILLIS, mSelectedTimeInMillis);


    }

【问题讨论】:

  • 能把fragment的onSaveInstanceState函数的代码贴出来吗?
  • @SujanShrestha 确定,已更新。

标签: android android-fragments


【解决方案1】:

我知道我回复迟了,但也许它会帮助其他人寻找这个问题的答案。当您有一个包含多个片段的活动时,不会调用片段中的 onDestroy。只要活动没有被破坏,这个片段就不会被破坏。但是,当您替换 fragment2 并将其添加到 backstack 时,您会返回到 fragment1,在 fragment2 中将调用方法 onDestroyView。因此,要保存 fragment2 的状态,您需要在 onDestroyView 中执行此操作,例如:

Bundle savedState;

public onCreateView(...){
 ..........
     if(savedState != null){
          String hello = savedState.getString("hello");
     }
 ..........
}
@Override
public void onDestroyView(){
     super.onDestroyView();
     savedState.putString("hello", "Say hello");
}

就是这样。我希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 2022-12-28
    • 2021-04-22
    • 2022-12-01
    • 2022-12-02
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多