savedInstanceState when restoring fragment from back stack

后端 未结 4 431
礼貌的吻别
礼貌的吻别 2021-01-31 15:53

Can I use savedInstanceState() to save the state when removing a fragment, then restore the state when I pop the fragment off the back stack? When I restore the fr

相关标签:
4条回答
  • 2021-01-31 15:57

    I like to store the View I return in onCreateView as a global variable and then when I return I simply check this:

    if(mBaseView != null) {
            // Remove the view from the parent
            ((ViewGroup)mBaseView.getParent()).removeView(mBaseView);
            // Return it
            return mBaseView;
        }
    
    0 讨论(0)
  • 2021-01-31 16:05

    The problem is that the fragment needs to have an Id or Tag associated with it in order for the FragmentManager to keep track of it.

    There are at least 3 ways to do this:

    1. In xml layout declare an Id for your fragment:

      android:id=@+id/<Id>
      
    2. If your fragments container View has an Id, use FragmentTransaction:

      FragmentTransaction  add (int containerViewId, Fragment fragment)
      
    3. If your fragment is not associated with any View (e.g. headless fragment), give it a Tag:

      FragmentTransaction  add (Fragment fragment, String tag)
      

    Also, see this SO answer.

    0 讨论(0)
  • 2021-01-31 16:11

    onSaveInstanceState is (unfortunately) not called in normal back-stack re-creation of a fragment. Check out http://developer.android.com/guide/components/fragments.html#Creating and the answer on How can I maintain fragment state when added to the back stack?

    0 讨论(0)
  • 2021-01-31 16:18

    FWIW, I hit this as well, but in my case onSaveInstanceState was called properly and I pushed in my state data when a new activity fragment was brought up on the smartphone. Same as you, the onActivityCreated was called w/ savedInstanceState always null. IMHO, I think it's a bug.

    I worked around it by creating a static MyApplication state and putting the data there for the equivalent of "global variables"...

    0 讨论(0)
提交回复
热议问题