0

当用户单击ListView一个片段中的元素时,会通过一个界面通知侦听器,并且它应该更改菜单旁边的片段。

我当前的代码看起来像这样

Fragment f = null;

switch(fragmentId) {
    case 0:
        f = new xFragment();
        break;
    case 1:
        f = new yFragment();
        break;
    ...
}

System.out.println(f.getClass().getName()); // Prints the name of the class correctly

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, f);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.commit();

当我从菜单中选择某个选项时,将调用包含片段的活动中的此函数。fragmentId如代码示例中所述,它正确打印了并且类的名称是正确的。

但是,片段没有改变。我试图替换方法f中的变量,但没有帮助。replacenew xFragment()

XML 布局文件看起来像这样。

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

    <fragment 
        android:id="@+id/menuFragment"
        android:layout_width="300dp"
        android:layout_height="match_parent"
        android:name="fi.peltoset.mikko.home.Navigation" />

    <LinearLayout
        android:id="@+id/fragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:orientation="vertical" >
    </LinearLayout>
</LinearLayout>

LinearLayoutfragmentContainer是片段的容器。

在启动时,我使用与上面显示的相同的代码,只是我更改replaceadd在应用程序启动时添加正确的片段。这工作正常。

怎么了?

4

4 回答 4

0

首先,“fragmentContainer”本身并不是一个片段。此外,您不能相互替换静态片段。它们必须是“动态添加”的片段。看看这个帖子

要替换动态创建的片段,请查看这篇文章

于 2013-08-06T16:28:58.450 回答
0

您可以尝试用 FrameLayout 替换 LinearLayout 吗?

请参阅https://groups.google.com/forum/#!topic/android-developers/gAhaoLlBob4,即使没有人解释原因。

于 2013-08-06T16:34:38.617 回答
0

您是否尝试替换 ID 为“menuFragment”的片段?如果是这样,那么您不能这样做,因为 XML 布局中指定的任何片段都无法替换。

于 2013-08-06T16:31:57.363 回答
0

你的目标是什么版本的安卓?

尝试使用支持片段管理器:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#getSupportFragmentManager()

于 2013-08-06T17:37:50.823 回答