无法用片段替换我的内容

时间:2017-01-29 14:47:54

标签: android android-fragments replace

我有activity我在其中显示地图。我想在单击导航抽屉上的项目时使用不同的片段进行更改。

我有下一个主要的xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.main.activities.Activity_main">

<include layout="@layout/my_bar" />

<android.support.design.widget.NavigationView
    android:layout_marginTop ="45dp"
    android:id="@+id/navigation"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:menu="@menu/navigation_menu"
    app:itemIconTint="#000000"
    android:background="#FFFFFF"
    app:itemTextColor="#000000"
    app:headerLayout="@layout/navigation_header">
</android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

酒吧布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/tools"
android:orientation="vertical"
android:id="@+id/my_bar"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- Toolbar  -->

<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/primary_color"
    android:titleTextAppearance="@color/text_and_icon_color"
    app:popupTheme="@style/Theme.AppCompat"
    android:elevation="1dp"
    android:textAlignment="center"
    android:layout_height="45dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="My app"
        android:layout_gravity="center"
        android:id="@+id/toolbar_title"
        android:layout_weight="1"
        android:textSize="24sp"
        android:textColor="@android:color/white" />

</android.support.v7.widget.Toolbar>

<include layout="@layout/my_content" />

</LinearLayout>

我的内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/my_content"
android:background="@color/window_background_color">


<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_below="@+id/adView"/>


</RelativeLayout>

我尝试用片段替换地图:

<FrameLayout 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="com.main.activities.catalog">

  <TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="@string/hello_blank_fragment" />

</FrameLayout>

我用这段代码打电话:

catalog fragment2 = new catalog();
        android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.my_content, fragment2, "fragment2");
        fragmentTransaction.commit();

但我的地图并没有被新片段取代。我哪里做错了?

1 个答案:

答案 0 :(得分:2)

正如@MikeM在对您的问题的评论中所说,问题是my_content.xml包含直接在XML中指定的静态片段。 FragmentManager不会在运行时动态替换此类片段。相反,您应该删除fragment标记,并在onCreate()中动态添加地图片段。通常,这是使用FrameLayout完成的,但我认为它也适用于RelativeLayout

有关详细信息,请参阅Fragment Developer Guide