2

1 つのアクティビティ内に複数のフラグメントがあります。

アプリを小さな画面と大きな画面の両方に対応させようとしています。

LinearLayout をルートとしてメイン レイアウトを作成しました。この LinearLayout には 2 つの FrameLayout が含まれています。1 つの FrameLayout は、リストまたはその他の詳細を格納する Fragments を格納するために使用されます。特定のボタンが押されたときにのみこれを表示したい。

もう 1 つの FrameLayout は、独自のフラグメントにあるアプリの主要部分 (マップ) を表示するために使用されます。

まず、次を使用してメイン マップ フラグメントを追加します。

FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

ft.add(R.id.viewer, viewModeFragment);
ft.commit();

サイド パネルにリスト フラグメントを表示する場合は、次のように呼び出します。

            FrameLayout fl = (FrameLayout)findViewById(R.id.list);
            fl.setVisibility(View.VISIBLE);

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.add(R.id.list, editOsmInfoFragment);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            ft.addToBackStack(null);
            ft.show(editOsmInfoFragment);
            ft.commit();

メインのアクティビティ レイアウトの XML ファイルは次のとおりです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

    <FrameLayout
        android:id="@+id/list"
        android:name="com.srose.cyclopathed.view.LoadRoutesFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:visibility="gone"/>

    <FrameLayout
        android:id="@+id/viewer"
        android:name="com.srose.cyclopathed.view.ViewModeFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2" />    
</LinearLayout> 

これはうまくいくようですが、主な問題は、タブレットでアプリを使用し、サイドバーに含まれるリストフラグメントが表示され、戻るボタンを押すと、フラグメントが期待どおりに消えますが、空白のリスト FrameLayout です。トランザクションの一部ではないため、画面に残ります。

私はこれを適切に使用していないと思いますが、戻るボタンの左にあるサイドバー全体のスライドが押されるように実装する方法がわかりません。

誰でも助けてもらえますか?ありがとう

4

1 に答える 1

0

R.id.list の可視性を明示的に設定しないでください。

レイアウト XML で、R.id.list FrameLayout の android:visiblility 属性を削除して、表示できるようにします。この FrameLayout は最初は空であるため、画面には表示されません。FragmentTransaction を介してプログラムでサイド パネルが追加されると表示され、([戻る] ボタンを使用して) 削除されると消えます。FrameLayout# setConsiderGoneChildrenWhenMeasuring()Fragment が削除されたときにレイアウトを折りたたむには、呼び出す必要があります。

于 2013-01-26T00:02:46.857 に答える