参考:https://www.w3cschool.cn/uawnhh/9zosjozt.html
A、静态加载【1、2、3】三个文件即可【必须指定FragmentContainerView的name属性】
B、动态加载:【1、2、3、4】四个文件执行【不能指定FragmentContainerView的name属性】
1、fragment_first.xml文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:text="我是fragment-first"
android:gravity="center"
android:textColor="#00f"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
2、对应匹配一个FirstFragment.kt文件
package com.example.kotlingradletemplatefirst.myfragment
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.kotlingradletemplatefirst.R
class FirstFragment : Fragment(R.layout.fragment_first) {
override fun onAttach(context: Context) {
super.onAttach(context)
println("onAttach")
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
println("onCreateView")
/**
* 1、父方法内部返回结果为:return inflater.inflate(R.layout.fragment_first, container, false)
* 2、务必注意:这里的R.layout.fragment_first【必须是fragment的布局文件】
*/
return super.onCreateView(inflater, container, savedInstanceState)
// return inflater.inflate(R.layout.fragment_first, container, false)
}
}
必须把以上2个资源文件分别嵌入Activity中!
3、activity嵌入fragment】activity_first.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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">
<Button
android:id="@+id/button_switch"
android:layout_width="200dp"
android:layout_height="50dp"
android:backgroundTint="#00f"
android:text="点击显示fragment内容"
tools:ignore="MissingConstraints" />
<!--
1、这里基于FragmentContainerView框架嵌入fragment的xml代码
2、这里指定name属性,则代表静态加载,未指定则动态加载
-->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container_first"
android:name="com.example.kotlingradletemplatefirst.myfragment.FirstFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</androidx.constraintlayout.widget.ConstraintLayout>
4、【activity调用fragment】FirstActivity.kt
package com.example.kotlingradletemplatefirst
import android.annotation.SuppressLint
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.commit
import com.example.kotlingradletemplatefirst.myfragment.FirstFragment
class FirstActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
val button = findViewById<Button>(R.id.button_switch)
button.setOnClickListener {
/**
* 1、点击button后,动态嵌入fragment
*/
supportFragmentManager.commit(true) {
add(R.id.fragment_container_first, FirstFragment())
}
}
}
}