1

我有一个活动 A,里面有一个片段 A。

Activity 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();

我最终将布局 B 显示在布局 A 下。

所以我使用 FrameLayout 将片段包装在布局 X 中并使用

ft.replace(R.id.FrameLayout1, f);

现在视图运行良好。然而,另一个问题出现了。

虽然布局 B 覆盖了布局 A,但按钮仍然处于活动状态。

这意味着当我查看布局 B 时,我仍然可以单击布局 A 上的按钮,即使我没有看到它。

即使我添加片段 C/D/E.....(布局 C/D/E....),布局 A 上的按钮仍然处于活动状态。

谁能解释这是为什么?我是否错误地使用了片段?谢谢!

一种打通的方法是将布局A留空,并使用其他布局覆盖它。但这似乎不是“正确”的方式?

4

3 回答 3

3

移除片段并添加 FrameLayout

   <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff" >
    </FrameLayout>

然后以编程方式添加片段。

在 android 片段按钮中单击通过片段(我不知道片段是否应该像那样工作)。我以前在这种情况下所做的就是使片段的布局可点击。所以点击不会通过。

于 2013-03-12T10:07:28.640 回答
0

将以下属性添加到顶部片段的 XML 根布局。

android:clickable="true"

这将确保触摸事件不会传播到比顶层更远的地方。

于 2015-02-17T00:19:52.637 回答
0

尝试为片段创建空容器,而不是在您的 xml 中包含片段。例如空框架布局。然后以编程方式将你的片段放在那里。

于 2013-03-12T09:52:26.587 回答