我在一个活动中有几个片段。
我正在尝试让我的应用与小屏幕和大屏幕兼容。
我创建了一个以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仍然在屏幕上,因为它不是交易的一部分。
我想我没有正确使用它,但我不知道如何实现它,以便按下后退按钮中的整个侧栏整个向左滑动。
有人可以帮忙吗? 感谢
答案 0 :(得分:0)
不要在R.id.list上明确设置可见性。
在布局XML中,删除R.id.list FrameLayout上的android:visiblility属性以使其可见。由于此FrameLayout最初为空,因此不会显示在屏幕上。当侧面板通过FragmentTransaction以编程方式添加到它时,您将看到它,并且当它被移除时(通过后退按钮),它将消失。您必须调用FrameLayout# setConsiderGoneChildrenWhenMeasuring()
,以便在删除片段时布局崩溃。