参考资料:
https://developer.android.com/guide/fragments/communicate
《第一行代码》第3版中260页代码,我的更新:
在fragment中,使用parentFragmentManager.setFragmentResult
来向FragmentManager
推送信息
class LeftFragment:Fragment() {
private var leftBinding: LeftFragmentBinding?= null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
leftBinding = LeftFragmentBinding.inflate(inflater, container, false)
val view = leftBinding!!.root
leftBinding!!.button.setOnClickListener {
val result = "result"
// 向父fragment推送信息
parentFragmentManager.setFragmentResult("requestKey", bundleOf("bundleKey" to result))
}
return view
}
override fun onDestroyView() {
super.onDestroyView()
leftBinding = null
}
}
在MainActivity中:
class MainActivity : AppCompatActivity() {
private lateinit var leftBinding: LeftFragmentBinding
private lateinit var mainBinding: ActivityMainBinding
private lateinit var button : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mainBinding.root)
replaceFragment(RightFragment())
// 响应子fragment传递上来的消息
supportFragmentManager.setFragmentResultListener("requestKey", this) { requestKey, bundle->
replaceFragment(AnotherFragment())
}
}
private fun replaceFragment(fragment: Fragment) {
Log.v("MainTag", "replaceFragment: " + fragment.toString())
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.rightLayout, fragment)
transaction.commit()
}
}