我的活动A里面有一个片段A.
活动A使用布局X,而片段A使用布局A.
布局代码X:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
android:id="@+id/fragment1"
android:name="android.app.DialogFragment"
android:layout_width="wrap_content"
android:layout_height="500dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="113dp"
class="com.example.fragtester.FragA" />
</RelativeLayout>
布局A只是textview + linearlayout。
我设置了另一个使用布局B的片段B.
现在我在活动A中使用以下代码来更改片段:
Fragment f = new FragB();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment1, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
我最终在布局A下显示布局B.
所以我使用FrameLayout将片段包装在布局X中并使用
ft.replace(R.id.FrameLayout1, f);
现在视图效果很好。但是,又出现了另一个问题。
虽然布局B涵盖布局A,但按钮仍处于活动状态。
这意味着当我查看布局B时,我仍然可以点击布局A上的按钮,即使我没有看到它。
即使我添加片段C / D / E .....(布局C / D / E ....),布局A上的按钮仍然有效。
任何人都能解释为什么会这样吗?我错误地使用了碎片吗?谢谢!
通过的方法是将布局A设为空白,并使用其他布局来覆盖它。但它似乎不是“正确的”方式??
答案 0 :(得分:3)
删除片段并添加FrameLayout
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
</FrameLayout>
然后以编程方式添加片段。
在android片段按钮中单击传递片段(我不知道片段是否像这样工作)。我曾经在这种情况下做的是使片段的布局可以点击。所以点击不会通过。
答案 1 :(得分:0)
尝试为片段创建空容器,而不是在xml中使用片段。例如空框架布局。然后以编程方式将您的片段放在那里。
答案 2 :(得分:0)
将以下属性添加到顶部片段的XML根布局中。
android:clickable="true"
这将确保触摸事件不会比顶层传播更多。