2

我在一个活动中有几个片段。

我正在尝试使我的应用程序与小屏幕和大屏幕兼容。

我创建了一个以 LinearLayout 作为根的主布局。此 LinearLayout 包含两个 FrameLayout。一个 FrameLayout 用于存储将存储列表或任何其他侧面细节的片段。我只希望在按下特定按钮时显示它。

另一个 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 上明确设置可见性。

In your layout XML, remove the android:visiblility attribute on R.id.list FrameLayout to make it visible. Since this FrameLayout is initially empty, it will not show up on screen. When the side panel is added to it programmatically via the FragmentTransaction, you will see it, and when it is removed (via the back button), it will go away. You must call FrameLayout# setConsiderGoneChildrenWhenMeasuring() in order for the layout to collapse when the Fragment is removed.

于 2013-01-26T00:02:46.857 回答