Android片段与先前的视图和按钮侦听器重叠

时间:2013-03-12 09:39:43

标签: android android-fragments

我的活动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设为空白,并使用其他布局来覆盖它。但它似乎不是“正确的”方式??

3 个答案:

答案 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"

这将确保触摸事件不会比顶层传播更多。