3

我想做这样的事情。图片比文字更容易: 在此处输入图像描述

当用户点击片段 B 上的按钮时,片段 B 发生了变化,但 A 没有改变。我做了两种不同的布局(肖像和陆地)。第一个有这样的布局

<?xml version="1.0" encoding="utf-8"?>
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.ContactsFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/contacts_fragment" />

我的片段布局中有一个带有简单活动调用的按钮:

Intent intent = new Intent(getActivity(), NextActivity.class);
startActivity(intent);

土地是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.ContactsFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/contacts_fragment" />

<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.my.app.HomeFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment_container" />

</LinearLayout>

我使用以下代码更改内部片段:

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
NextFragment nextFrag = new NextFragment();
ft.replace(R.id.fragment_container, nextFrag);
ft.addToBackStack(null);
ft.commit();

这部分效果很好。

我现在有两个问题:

  • 怎么把这两种方式在主activity中改变内容呢?我的意思是,在主要活动中,片段应该调用第二种方式,但在正常活动中,我需要调用第一种。

  • 如果我单击片段 A 中的一个项目,然后单击片段 B 中的按钮,该按钮将片段更改为 NextFragment。如果我点击另一个项目,我也会这样做。我可以回到第一个用户。单击新项目时有没有办法转储堆栈?

谢谢你的帮助。

Ps:我使用的是原生片段库而不是支持 v4。

4

2 回答 2

3

我很难理解您的 2 个问题的具体细节,因为它们含糊不清并且没有提供足够的细节。

但是,由于您希望Fragment在运行时更改 s,因此不应放入<fragment/>布局文件。您当前的架构无法更改Fragment布局中的 s,这不是您想要的。

注意:当您通过在布局 XML 文件中定义片段来将片段添加到活动布局时,您无法在运行时删除该片段。如果您计划在用户交互期间交换片段,则必须在活动首次启动时将片段添加到活动中。

您应该在布局文件FrameLayout中为您的 s 使用容器,并根据容器是否存在将单个add s 添加到这些容器中。这将允许应用程序创建 1 个纵向和 2 个横向(假设您有每个方向的布局)。这也将允许您能够根据需要换出s,并将它们添加到后堆栈中。Fragment ActivityFragmentFrameLayoutFragmentFragmentFragment

可以在此处找到此Google 推荐方法的示例。

于 2013-02-26T20:02:24.813 回答
1

您可以从这里找到一个好的解决方案。

于 2015-05-19T11:31:47.670 回答