我在市场上的应用程序,我得到以下异常:FragmentTransaction犯onclick“事件IllegalStateException异常:的onSaveInstanceState后无法执行此操作”
Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1343)
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1361)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:729)
at android.app.BackStackRecord.commit(BackStackRecord.java:705)
at com.mysupercoolapp.ui.fragments.ResultFragment$2.onItemClick(ResultFragment.java:139)
at android.widget.AdapterView.performItemClick(AdapterView.java:339)
at android.widget.AbsListView.performItemClick(AbsListView.java:1544)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3721)
at android.widget.AbsListView$3.run(AbsListView.java:5660)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6837)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
我已经读过大部分的主题关于这个问题,但我不知道我在代码中做错了什么。这不像我在onResume方法中替换片段。我也没有缓存一个FragmentTransaction实例。 我在用户单击ListView中的项目时替换片段。
我的碎片的代码工作流程如下
OnCreateView>执行的AsyncTask从数据库加载一些项目> onPostExecute称这台适配器为ListView的方法,当用户按下一个项目就增加了一个OnItemClickListener所以在ListView中,它在另一个片段中打开该项目。
下面是它的代码:
@Override
protected void onPostExecute(ResultAdapter adapter) {
// post execute in AsyncTask
setListAdapter(adapter);
}
public void setListAdapter(final ResultAdapter adapter) {
if (adapter != null && isAdded()) {
resultList.setAdapter(adapter);
resultList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final FragmentTransaction ft = getFragmentManager().beginTransaction();
SomeFragment fragment = new SomeFragment();
ft.replace(R.id.content_frame, fragment, "main_fragment");
ft.addToBackStack(null);
ft.commit();
}
});
adapter.notifyDataSetChanged();
}
}
难道还有比调用commitAllowingStateLoss()
或压倒一切的onSaveInstanceState()
一个更好的解决方案?
P.S .:我打算使用API> 14,并使用标准的android.app.FragmentTransaction
包。将发生
安置自己的onSavedInstanceState()代码。 –