美文网首页
一个activity 多个fragment写页面

一个activity 多个fragment写页面

作者: 别看后面有人 | 来源:发表于2023-03-07 15:36 被阅读0次
    1. FragmentTransaction区别add和replace
    • 源码中关于add的解释


      截屏2023-03-08 14.40.59.png
    • 源码中关于replace的解释


      截屏2023-03-08 14.45.13.png

      和明显,add是把fragment添加到容器中,replace是如果容器中有相同fragment的话,会先移除然后再添加,另外,如果使用add的话,需要配合hide一起使用,生命周期也会有很大不同当使用add的时候,onResume(),onPause(),onStop()这几个方法会走一次之前add进去的fragment,使用返回键的时候,onViewCreated()和onResume()也会执行之前add进去的fragment,而使用replace的时候,只会执行当前fragment的方法,不会执行之前fragment的生命周期

    2.addToBackStack()这个方法是返回之前fragment的回退栈

    下面是一个acitcity中添加多个fragment的代码:

    class ThreeActivity : AppCompatActivity() {
        private  var TAG="TAG"
        private lateinit var binding: ActivityThreeBinding
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding=ActivityThreeBinding.inflate(layoutInflater)
            setContentView(binding.root)
            initView()
        }
        private fun initView(){
            val fragmentOne=FragmentOne()
            supportFragmentManager.beginTransaction().replace(R.id.lv_fragment_container,fragmentOne).commit()
            binding.btBack.setOnClickListener {
                onBackPressed()
            }
        }
    }
      override fun onBackPressed() {
            if (supportFragmentManager.backStackEntryCount<=0){
                finish()
            }else{
                supportFragmentManager.popBackStack()
            }
        }
    

    fragment 的代码

    class FragmentOne:Fragment() {
        private  var TAG="TAG"
        private lateinit var binding: FragmentThreeBinding
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            binding=FragmentThreeBinding.inflate(inflater,container,false)
            return binding.root
        }
    
       
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            binding.tvTitle.text="FragmentOne"
            binding.btNext.setOnClickListener {
                val fragmentTwo=FragmentTwo()
                val fragmentTransaction = parentFragmentManager.beginTransaction()
                fragmentTransaction.addToBackStack(null)
                fragmentTransaction.replace(R.id.lv_fragment_container,fragmentTwo)
                fragmentTransaction.commit()
            }
        }
    }
    
    class FragmentTwo:Fragment() {
        private  var TAG="TAG"
    
        private lateinit var binding: FragmentThreeBinding
        override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            binding=FragmentThreeBinding.inflate(inflater,container,false)
            return binding.root
        }
        override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
            binding.tvTitle.text="FragmentTwo"
            binding.btNext.setOnClickListener {
                val fragmentTwo=FragmentThree()
                val fragmentTransaction = parentFragmentManager.beginTransaction()
                fragmentTransaction.addToBackStack(null)
                fragmentTransaction.replace(R.id.lv_fragment_container,fragmentTwo)
                fragmentTransaction.commit()
            }
        }
    

    相关文章

      网友评论

          本文标题:一个activity 多个fragment写页面

          本文链接:https://www.haomeiwen.com/subject/wkcbldtx.html