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()
}
}
}
<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)
}
}
<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)
}
}
<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>