我有一个活动YYYY
(扩展一个片段),扩展了一个基本活动XXXX
,后者又扩展了ActionBarActivity
。
我现在根据某些条件在finish()
onCreate()
方法(最顶层)中调用XXXX
。
但是我在下面得到了例外。请帮助我。
PS:我在return;
之后致电finish();
,以便onCreate()
的其余部分不会被执行。
07-26 16:46:26.902 14569-14569/E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to destroy activity {XXXXXXXXXXXXXX}: java.lang.IllegalArgumentException: No view found for id 0x7f0c01ec (XXXXXXXX) for fragment XXXXXXXXXXXXXX{2c85cf32 #2 id=0x7f0c01ec}
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3758)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3776)
at android.app.ActivityThread.access$1400(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f0c01ec (XXXXXXXXXXX) for fragment XXXXXXXXXXXXXXX{2c85cf32 #2 id=0x7f0c01ec}
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:945)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499)
at android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1963)
at android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:313)
at android.support.v7.app.ActionBarActivity.onDestroy(ActionBarActivity.java:166)
at XXXXXXXXXXXXXXXXXXX.onDestroy(XXXXXXXXXXXX.java:100)
at android.app.Activity.performDestroy(Activity.java:6132)
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1163)
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3745)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3776)
at android.app.ActivityThread.access$1400(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
答案 0 :(得分:3)
好的,我发现了问题所在。第一次调用finish()
完美无缺。当应用程序被系统杀死并重新创建时,会出现此问题。如果它只是重新创建的活动,请在finish()
之后调用setContentView()
。
但是如果活动中有一些片段膨胀,那么当这个特定活动被杀死时,Android也会存储片段的状态。但它并没有将它保存在FragmentManager中,而是保存在不同的列表中。因此,当重新创建活动时,Android已经知道碎片是什么。因此,我们不能在膨胀片段之前简单地销毁它。如果我们这样做,我们会在onDestroy()
因此,调用finish()
的理想位置不仅仅是在setContentView()
之后,而且还在onCreateView()
之后。因此,我通过在活动的finish()
中调用onResume()
来结束。事情很好。
虽然我找到了解决方案,但我似乎无法找到如何清除Android在重新创建活动时维护的片段历史记录列表。如果我可以清除该列表,那么我可以在finish()
本身中调用onCreate()
。这是我仍在寻找的东西。
答案 1 :(得分:0)
如果从 onCreate()调用 finish(),并不意味着onStart和onResume没有被调用(活动实际上是onFinishing)。 要修复你的问题你应该在onStart和onResume上调用isFinishing(),如果是真的那么从那一点返回。
答案 2 :(得分:0)
在setContentView()
之后添加finish()