【发布时间】:2014-03-20 04:25:13
【问题描述】:
我有一个带有几个子片段的片段。我使用以下代码将子片段放置在父布局中:
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
var transaction = ChildFragmentManager.BeginTransaction ();
if (ChildFrag == null) {
var childFragment = new ChildFragment ();
transaction.Replace (Resource.Id.child_fragment_container, childFragment, ChildFragment.FragmentTag);
}
... place other fragments
transaction.Commit ();
}
ChildFragment ChildFrag {
get {
return ChildFragmentManager.FindFragmentByTag (ChildFragment.FragmentTag) as ChildFragment;
}
}
在设备旋转之后,我可以看到父片段引用了新创建的 Activity,但子片段仍然引用了旧的(旋转前)Activity 实例。当我在配置更改后尝试执行任何片段事务时,这会成为一个问题。例如,启动对话框会产生以下错误:
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at android.support.v4.app.DialogFragment.show(DialogFragment.java:127)
at myapp.myviews.SpinnerRow.n_onClick(Native Method)
at myapp.myviews.SpinnerRow.onClick(SpinnerRow.java:68)
at android.view.View.performClick(View.java:4475)
at android.view.View$PerformClick.run(View.java:18786)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
什么会导致子片段引用过时的 Activity?
this post 中提供的解决方案是不保留父片段。我需要保留片段。
【问题讨论】:
标签: android android-fragments xamarin.android