一、简介
Fragment(碎片) 主要用于对Activity UI 模块化,依托Activity存在,当Activity销毁时,Fragment随之销毁
二、生命周期
onAttach() Fragment和Activity 绑定
onCreate() 初始化
onCreateView() 创建视图
onActivityCreated() Activity 已初始化完成
onStart() 界面可见
onResume() 获得焦点
onPause() 失去焦点
onStop() 停止 界面不可见
onDestroyView() 销毁视图
onDestroy() 销毁
onDetach() 取消绑定
三、实例
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var bf: BlankFragment
private lateinit var wf: WhiteFragment
private lateinit var ft: FragmentTransaction
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
init()
}
private fun init() {
initFragment()
initClick()
}
private fun initFragment() {
ft = supportFragmentManager.beginTransaction()
bf = BlankFragment()
val bundle = Bundle()
bundle.putString("blank", "人什么时候才会死?被子弹贯穿心脏的时候?不对!得了不治之症的时候?不对!喝下毒蘑菇汤的时候?不对!是被人遗忘的时候!")
bf.arguments = bundle
ft.add(R.id.fl_content, bf)
wf = WhiteFragment()
val b = Bundle()
b.putString("white", "测试")
wf.arguments = b
ft.add(R.id.fl_content, wf)
hideFragment(ft)
ft.show(bf)
ft.commit()
}
//隐藏所有fragment
private fun hideFragment(ft: FragmentTransaction) {
ft.hide(bf)
ft.hide(wf)
}
private fun initClick() {
bf.setResultListener(object : BlankFragment.FragmentResult_Listener {
override fun Fragment_DataEvent(content: String) {
Log.d("mainActivity", content)
}
})
binding.btnBf.setOnClickListener {
ft = supportFragmentManager.beginTransaction()
hideFragment(ft)
ft.show(bf)
ft.commit()
}
binding.btnWf.setOnClickListener {
ft = supportFragmentManager.beginTransaction()
hideFragment(ft)
ft.show(wf)
ft.commit()
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/fl_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal"
android:paddingHorizontal="30dp">
<Button
android:id="@+id/btn_bf"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="blank"
android:textSize="16sp"
android:textAllCaps="false" />
<Button
android:id="@+id/btn_wf"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="30dp"
android:layout_weight="1"
android:textSize="16sp"
android:text="white"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
class BlankFragment : Fragment() {
private lateinit var binding: FragmentBlankBinding
private lateinit var listener: FragmentResult_Listener
private var activityData: String = ""
//绑定
override fun onAttach(context: Context) {
super.onAttach(context)
Log.d("fragment——", "onAttach")
}
//初始化
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
activityData = it.getString("blank").toString()
Log.d("BlankFragment", "$activityData")
}
Log.d("fragment——", "onCreate")
}
//创建视图
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentBlankBinding.inflate(inflater, container, false)
Log.d("fragment——", "onCreateView")
initClick()
return binding.root
}
private fun initClick() {
binding.btnTest.setOnClickListener {
listener.let {
listener.Fragment_DataEvent("测试")
}
}
}
//Activity 已初始化完成
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
Log.d("fragment——", "onActivityCreated")
}
//界面可见
override fun onStart() {
super.onStart()
Log.d("fragment——", "onStart")
}
//获得焦点
override fun onResume() {
super.onResume()
Log.d("fragment——", "onResume")
}
//失去焦点
override fun onPause() {
super.onPause()
Log.d("fragment——", "onPause")
}
//停止 界面不可见
override fun onStop() {
super.onStop()
Log.d("fragment——", "onStop")
}
//销毁视图
override fun onDestroyView() {
super.onDestroyView()
Log.d("fragment——", "onDestroyView")
}
//销毁
override fun onDestroy() {
super.onDestroy()
Log.d("fragment——", "onDestroy")
}
//取消绑定
override fun onDetach() {
super.onDetach()
Log.d("fragment——", "onDetach")
}
public fun setResultListener(listener: FragmentResult_Listener) {
this.listener = listener
}
interface FragmentResult_Listener {
fun Fragment_DataEvent(content: String)
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:gravity="center"
android:orientation="vertical"
tools:context=".BlankFragment">
<Button
android:id="@+id/btn_test"
android:layout_width="300dp"
android:layout_height="60dp"
android:text="测试"
android:textSize="30sp" />
</LinearLayout>
class WhiteFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
val data = it.getString("white")
Log.d("whiteFragment", "$data")
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_white, container, false)
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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"
tools:context=".WhiteFragment">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="test" />
</FrameLayout>