代码之家  ›  专栏  ›  技术社区  ›  CL So

Android,如何替换初始片段?

  •  0
  • CL So  · 技术社区  · 6 年前

    我创建这个片段并设置初始片段 FirstFragment ,如果不设置此初始片段,应用程序将崩溃。

    <fragment
        android:id="@+id/fragment"
        android:name="com.app.FirstFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp" />
    

    然后我使用这个函数来替换片段,这很好,除了 第一片段 ,此片段一直显示在屏幕上如何替换此碎片?

    enum class FragmentType {
        SETTING, ACTIVITY, PROFILE, CONNECT, SCANNER
    }
    private fun changeFragmentTo(type: FragmentType) {
        val transaction = supportFragmentManager.beginTransaction()
        when(type) {
            FragmentType.SETTING -> {
                title = "SETTING"
                val f = SettingFragment()
                transaction.replace(R.id.fragment, f)
            }
    
            FragmentType.ACTIVITY -> {
                title = "ACTIVITY"
                val f = ActivityFragment()
                transaction.replace(R.id.fragment, f)
            }
    
            FragmentType.PROFILE -> {
                title = "PROFILE"
                val f = ProfileFragment()
                transaction.replace(R.id.fragment, f)
            }
            FragmentType.CONNECT -> {
                title = "CONNECT"
                val f = ConnectFragment()
                transaction.replace(R.id.fragment, f)
            }
            FragmentType.SCANNER -> {
                title = "SCANNER"
                val f = ScannerFragment()
                transaction.replace(R.id.fragment, f)
            }
    
        }
        transaction.addToBackStack(null)
        transaction.commit()
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   jujka    6 年前

    你的问题在xml内部而不是使用 fagment 标签,您应该创建一个布局,该布局将成为片段的容器。

    更改xml如下:

    <FrameLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    并参考您的 FrameLayout 在里面,我想,活动通过它的id R.id.fragment 以下内容:

    val fragment = SettingFragment()
    transaction.replace(R.id.fragment_container, fragment)