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):致命的な例外:メイン05-14 03:00:51.379:E / AndroidRuntime(3117):android.view.InflateException:バイナリXMLファイル行#13:エラークラスフラグメントの膨張05-1403:00:51.379:E / AndroidRuntime(3117):android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:582)05-14 03:00:51.379:E / AndroidRuntime(3117): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)05-14 03:00:51.379:E / AndroidRuntime(3117):at 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で。 inflate(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):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(ネイティブメソッド)05-14 03:00:51.379:E / AndroidRuntime(3117):原因:java.lang.IllegalArgumentException:バイナリXMLファイル行#13:ID 0x7f050001、タグnull、または親ID0x0が別のIDと重複していますmyPackage.MenuFragment 05-14 03:00:51.379のフラグメント:E / AndroidRuntime(3117):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 moreapp.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

はい、XMLで定義されたフラグメントを取得したため、setcontentviewがクラッシュします。ここにはいくつかのオプションがあります(私が知っていることですが、私はこの問題のプロではありません;))。フラグメントがある場所に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 に答える