savedInstanceState从还原堆栈中恢复片段时

我可以使用savedInstanceState()来保存删除一个片段时的状态,然后恢复当我从后面堆栈popup片段的状态? 当我从后端堆栈恢复片段时,savedInstanceState bundle始终为空。

现在,应用程序stream是:片段创build – >片段删除(添加到后面的堆栈) – >从后面的堆栈(savedInstanceState包是空的)恢复的片段。

这是相关的代码:

 public void onActivityCreated(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle = getArguments(); Long playlistId = bundle.getLong(Constants.PLAYLIST_ID); int playlistItemId = bundle.getInt(Constants.PLAYLISTITEM_ID); if (savedInstanceState == null) { selectedVideoNumber = playlistItemId; } else { selectedVideoNumber = savedInstanceState.getInt("SELECTED_VIDEO"); } } public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(Constants.SELECTED_VIDEO, selectedVideoNumber); } 

我认为这个问题是, onSavedInstanceState()在被移除并被添加到后端堆栈时从不被调用。 如果我不能使用onsavedInstanceState(),是否有另一种方法来解决这个问题?

onSaveInstanceState(不幸的是)在正常的堆栈重新创build片段时不会被调用。 检查出http://developer.android.com/guide/components/fragments.html#Creating和答案我怎样才能维护片段状态时,添加到后面的堆栈?;

我喜欢将我在onCreateView中返回的视图存储为全局variables,然后当我返回时,我只需检查:

 if(mBaseView != null) { // Remove the view from the parent ((ViewGroup)mBaseView.getParent()).removeView(mBaseView); // Return it return mBaseView; } 

问题是片段需要有一个IdTag ,以便FragmentManager跟踪它。

至less有三种方法可以做到这一点:

  1. 在xml布局中为你的片段声明一个Id

     android:id=@+id/<Id> 
  2. 如果您的碎片容器View有一个Id ,使用FragmentTransaction :

     FragmentTransaction add (int containerViewId, Fragment fragment) 
  3. 如果你的片段不与任何View (如无头片段)相关联,给它一个Tag

     FragmentTransaction add (Fragment fragment, String tag) 

另外,看到这个答案。

FWIW,我也是这样,但是在我的情况下,保存实例状态被正确调用,并且当智能手机上出现新的活动片段时,我推送了状态数据。 和你一样,onActivityCreated被称为w / savedInstanceState总是为空。 恕我直言,我认为这是一个错误。

我通过创build一个静态的MyApplication状态,并把数据放在那里等同于“全局variables”来解决它。