2

当用户将设备旋转到横向模式时尝试更改片段宽度

那是我的片段:

    <fragment
        android:id = "@+id/menu"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        class="myPackage.MenuFragment" />

这就是我的 onConfigurationChanged 方法:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setContentView(R.layout.main);
    findViewById(R.id.menu).getLayoutParams().width = (int) (getWindowManager()
            .getDefaultDisplay().getWidth());
}

但是当我旋转设备时,输出崩溃:

05-14 03:00:51.379: E/AndroidRuntime(3117): 致命异常: main 05-14 03:00:51.379: E/AndroidRuntime(3117): android.view.InflateException: 二进制 XML 文件行 #13: 错误膨胀类片段 05-14 03:00:51.379: E/AndroidRuntime(3117): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:582) 05-14 03:00:51.379: E/AndroidRuntime(3117):在 android.view.LayoutInflater.rInflate(LayoutInflater.java:618) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 05-14 03 :00:51.379: E/AndroidRuntime(3117): 在 android.view.LayoutInflater.inflate(LayoutInflater.java:407) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.view.LayoutInflater。膨胀(LayoutInflater.java:320)05-14 03:00:51.379:E/AndroidRuntime(3117):在 android.view。LayoutInflater.inflate(LayoutInflater.java:276) 05-14 03:00:51.379: E/AndroidRuntime(3117): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.app.Activity.setContentView(Activity.java:1654) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 softserveinc.dbyst.reveal .Reveal_prototypeActivity.onConfigurationChanged(Reveal_prototypeActivity.java:71) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:4153) 05-14 03:00:51.379 : E/AndroidRuntime(3117): 在 android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:4246) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.app.ActivityThread$H.handleMessage( ActivityThread.java:2215) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.os.Handler.dispatchMessage(Handler.java:99) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.os.Looper.loop(Looper .java:143) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.app.ActivityThread.main(ActivityThread.java:4914) 05-14 03:00:51.379: E/AndroidRuntime(3117) ): at java.lang.reflect.Method.invokeNative(Native Method) 05-14 03:00:51.379: E/AndroidRuntime(3117): at java.lang.reflect.Method.invoke(Method.java:521) 05 -14 03:00:51.379: E/AndroidRuntime(3117): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-14 03:00:51.379: E/AndroidRuntime(3117 ): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 dalvik.system.NativeStart。main(Native Method) 05-14 03:00:51.379: E/AndroidRuntime(3117): Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f050001, tag null, or parent id 0x0 with another myPackage.MenuFragment 的片段 05-14 03:00:51.379: E/AndroidRuntime(3117): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:275) 05-14 03:00:51.379: E /AndroidRuntime(3117): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558) 05-14 03:00:51.379: E/AndroidRuntime(3117): ... 19 更多app.FragmentActivity.onCreateView(FragmentActivity.java:275) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558) 05-14 03:00: 51.379: E/AndroidRuntime(3117): ... 19 更多app.FragmentActivity.onCreateView(FragmentActivity.java:275) 05-14 03:00:51.379: E/AndroidRuntime(3117): 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558) 05-14 03:00: 51.379: E/AndroidRuntime(3117): ... 19 更多

我做错了什么?

4

1 回答 1

1

是的,您的 setcontentview 崩溃了,因为您在 XML 中定义了片段。你在这里有几个选择(据我所知,我不是这个问题的专家;))。您可以将 FrameLayout 放在片段所在的位置,然后使用替换事务添加片段:

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        fragmentTransaction.replace(R.id.frameLayout_container, yourFragmentObject);

        fragmentTransaction.commit();

或者,您可以测试 setRetainInstance(true) 是否有效。

于 2012-05-15T08:28:45.507 回答