替换<fragment>容器中定义的片段

时间:2018-11-29 21:45:54

标签: android android-layout android-fragments

我试图替换“ android:name”中定义的片段,该片段是“ activity_main”布局的一部分,但未成功。

我做错了什么?

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    rssFragment = RssFragment()
    supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag")

}

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/main_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


    <fragment
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:name="com.developer.myapplication.user_fragment"
            android:id="@+id/fragment"
            />

    <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="?android:attr/windowBackground"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:menu="@menu/navigation"
            app:layout_constraintTop_toBottomOf="@+id/fragment"
            app:layout_constraintStart_toStartOf="parent"/>

</android.support.constraint.ConstraintLayout>

3 个答案:

答案 0 :(得分:4)

您不能将XML声明的FragmentFragmentManager替换/删除调用混合使用。请参见Create a fragment,尤其是末尾的注释:

  

注意:当您通过定义片段将片段添加到活动布局时   布局XML文件中的片段,您不能在以下位置删除该片段   运行。如果您打算在用户使用期间交换片段进出   互动时,您必须在   活动首先开始,如构建灵活的UI中所示。

答案 1 :(得分:1)

您不能用另一个片段替换XML布局中已经定义的<fragment>,它只会将新片段附加到现有片段的布局上。

我相信您别无选择,只能将<fragment>替换为另一个ViewGroup,例如:

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/fragment"/>

并将其替换为您现有的通话:

supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag")

答案 2 :(得分:0)

缺少提交事务方法。

supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, "rssFragmentTag").commit()