正确使用机器人堆栈

时间:2013-01-25 21:54:35

标签: android android-fragments

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

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

我创建了一个以LinearLayout为根的主布局。此LinearLayout包含两个FrameLayouts。一个FrameLayout用于存储将存储列表或任何其他边详细信息的Fragments。我只希望在按下特定按钮时将其显示在视野中。

另一个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仍然在屏幕上,因为它不是交易的一部分。

我想我没有正确使用它,但我不知道如何实现它,以便按下后退按钮中的整个侧栏整个向左滑动。

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

不要在R.id.list上明确设置可见性。

在布局XML中,删除R.id.list FrameLayout上的android:visiblility属性以使其可见。由于此FrameLayout最初为空,因此不会显示在屏幕上。当侧面板通过FragmentTransaction以编程方式添加到它时,您将看到它,并且当它被移除时(通过后退按钮),它将消失。您必须调用FrameLayout# setConsiderGoneChildrenWhenMeasuring(),以便在删除片段时布局崩溃。