0
点赞
收藏
分享

微信扫一扫

Fragment的使用(五)-使用FragmentOnAttachListener接口进行Fragment的通信

夏天的枫_ 2022-01-13 阅读 117

文章目录

一、前言

在开发中会涉及到Fragment之间通信的问题。之前的几篇记录了几种方式。这里再记录一种使用接口进行通信的方式。本篇记录ActivityFragment通信的方式。FragmentFragment之间的通信也可以使用这种方式。以前是使用onAttachFragment()进行获取Fragment的添加监听。但是新版的Fragment使用FragmentOnAttachListener进行了替换。所以这里使用新版的api。

二、代码演示

Fragment2.kt


class Fragment2 : Fragment() {

    var callback: CallBack ?= null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank2, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        view.findViewById<Button>(R.id.fragment1_btn).setOnClickListener {
            Log.e("YM","---->callBack是否为null:${null == callback}")
            callback?.setResult("ok")
        }
    }

}

interface CallBack{
    fun setResult(value: String)
}

MainActivity.kt


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        addFragmentListener()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    //添加Fragment时候的监听
    private fun addFragmentListener(){
        supportFragmentManager.addFragmentOnAttachListener { fragmentManager, fragment ->
            if (fragment is Fragment2){
                fragment.callback = object : CallBack{
                    override fun setResult(value: String) {
                        Log.e("YM","---->接收到Fragment中的数据")
                    }
                }
            }
        }
    }

}

注意:FragmentOnAttachListener需要在oncreate()之前调用

这个方式替换了onAttachFragment()

三、参考链接

  1. 与其他 Fragment 通信
举报

相关推荐

0 条评论