Android 片段崩溃:java.lang.IllegalArgumentException:未找到任何视图
我的应用程序当前出现了一个崩溃,我只能通过具有以下堆栈的Crashlytics来检测:Android 片段崩溃:java.lang.IllegalArgumentException:未找到任何视图,android,android-fragments,Android,Android Fragments,我的应用程序当前出现了一个崩溃,我只能通过具有以下堆栈的Crashlytics来检测: java.lang.RuntimeException: Unable to resume activity {com.my.app/com.my.app.activities.SplashActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f080048 (com.my.app.activities:id/contain
java.lang.RuntimeException: Unable to resume activity {com.my.app/com.my.app.activities.SplashActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f080048 (com.my.app.activities:id/container) for fragment l{453a70a8 #0 id=0x7f080048 FragmentXpto}
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2836)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2865)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2291)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5137)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:718)
at dalvik.system.NativeStart.main(NativeStart.java)
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f080048 (com.my.app:id/container) for fragment l{453a70a8 #0 id=0x7f080048 DropboxFirstLinkFragment}
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:939)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1126)
at android.support.v4.app.BackStackRecord.run(SourceFile:739)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(SourceFile:1489)
at android.support.v4.app.FragmentActivity.onPostResume(SourceFile:434)
at android.support.v7.app.ActionBarActivity.onPostResume(SourceFile:115)
at android.app.Activity.performResume(Activity.java:5323)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2826)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2865)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2291)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1246)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:212)
at android.app.ActivityThread.main(ActivityThread.java:5137)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:718)
at dalvik.system.NativeStart.main(NativeStart.java)
我的活动布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></FrameLayout>
这是“一生中只有一次”可复制的问题之一。。。所以我没有传递错误的视图id,或者类似的东西,否则它会频繁崩溃
更多信息:
- 在setContentView之后或onResume上,我在SplashActivity的onCreate方法上使用带有replace的FragmentTransaction: FragmentTransaction=MFFragmentManager.beginTransaction().replace(R.id.container, 新片段,标签); commit()
有人能给我解释一下为什么/什么时候会发生这种情况,以及我如何预防这种情况吗?我已经通过验证if
findViewById(R.id.container)!=null
且仅在本例中执行Fragment.replace。
无论何时为空,我都会存储该操作,并在活动的下一次onResume时重试该操作。
我想我已经发现了这个问题,因为我看到在恢复时经过onResume的片段没有经过onCreateView,它们在恢复时不在FragmentManager堆栈的顶部,并且在后台活动被终止之后 你的片段的xml视图在哪里?你能告诉我们更多关于崩溃的信息吗?您是如何复制它的?请检查
R.id.container
,它不是found@D3LIC1OU5我不是。我现在才知道这是因为我收到了crashlytics的报告。每个版本的应用程序都会发生1-2次。。“这意味着它真的很少见。”伊恩维克在问题上添加了布局。
void moveToState(Fragment f, int newState, int transit, int transitionStyle,
boolean keepActive) {
// Fragments that are not currently added will sit in the onCreate() state.
...
case Fragment.CREATED:
if (newState > Fragment.CREATED) {
if (DEBUG) Log.v(TAG, "moveto ACTIVITY_CREATED: " + f);
if (!f.mFromLayout) {
ViewGroup container = null;
if (f.mContainerId != 0) {
container = (ViewGroup)mContainer.findViewById(f.mContainerId);
if (container == null && !f.mRestored) {
throwException(new IllegalArgumentException(
"No view found for id 0x"
+ Integer.toHexString(f.mContainerId) + " ("
+ f.getResources().getResourceName(f.mContainerId)
+ ") for fragment " + f));
}
}
...