如何替换活动中的片段



我有MainActivity,其中导航栏包括4个按钮,我想在我的MainActivity中替换基于在导航栏中单击按钮的片段。

<标题>

代码activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.ismaeldivita.chipnavigation.ChipNavigationBar
android:id="@+id/chipNavigationBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#fff"
android:padding="8dp"
app:cnb_menuResource="@menu/bottom_menu"
app:layout_constraintBottom_toBottomOf="parent"
tools:ignore="MissingConstraints" />

<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment"
android:name="com.my.app.HomeFragment"
android:layout_width="fill_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/chipNavigationBar"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="125dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {
private val menu by lazy { findViewById<ChipNavigationBar>(R.id.chipNavigationBar) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// Fragments
menu.setItemSelected(R.id.home)
// USING: https://github.com/ismaeldivita/chip-navigation-bar
menu.setOnItemSelectedListener { id ->
menu.setItemSelected(id)
}
// End of Fragments
}
}

解释
// in XML
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment"
android:name="com.my.app.HomeFragment" // set default fragment onCreate
// in MainActivity
menu.setItemSelected(R.id.home) // set default active nav item
<标题>

现在我的应用程序onCreate将加载默认片段为项目1我的导航,我的问题是我如何设置其他片段为其他3个按钮在我的导航?(另外)如果let say用户想从项目3返回到项目1,项目1应该被设置为这个默认片段。

任何想法?

我说的是这样的结构:

menu.setOnItemSelectedListener { id ->
        val transaction = supportFragmentManager.beginTransaction()
        when (id) {
            R.id.your_id-> {
                transaction.replace(R.id.contentContainer, YourFrag()).commit()
            }
           ...
        }
    }

因此,您将处理选定的id,然后对片段进行事务处理。

最新更新