Android 第四十二章 Fragment

一、简介

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>
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值