我试图替换“ 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>
答案 0 :(得分:4)
您不能将XML声明的Fragment
与FragmentManager
替换/删除调用混合使用。请参见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()