btncloseBottomSheet.setOnClickListener {
val result = Bundle().apply {
// put your data in bundle
putInt("MY_KEY", 6)
}
setFragmentResult("requestCode", result)
dismiss()
}
class PreviousFragment : FragmentResultListener {
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// set fragment listener
parentFragmentManager.setFragmentResultListener(
"requestCode",
viewLifecycleOwner,
this
)
}
...
// get result from other fragments by FragmentResultListener
override fun onFragmentResult(requestKey: String, result: Bundle) {
when (requestKey) {
"requestCode" -> {
val resultFromBundle = result.getInt("MY_KEY")
// Do somthing
}
}
}
}
3条答案
按热度按时间fnvucqvd1#
这实际上取决于你使用的组件。如果您正在使用Android Jetpack组件,请查看这篇文章:LINK
您应该能够像使用
startActivityForResult()
传递数据那样来回传递数据此外,当你在它也请查看官方文档,有一个很好的例子,将帮助您更好地理解这一点:LINK
dced5bon2#
虽然你提到监听器以外的任何方式,但根据文件:
从Fragment 1.3.0-alpha 04开始,每个FragmentManager实现FragmentResultOwner。这意味着FragmentManager可以充当片段结果的中央存储。此更改允许组件通过设置片段结果并侦听这些结果来相互通信…
为给定的requestKey设置FragmentResultListener。一旦给定的LifecycleOwner至少处于STARTED状态,setFragmentResult使用相同requestKey设置的任何结果都将被传递到回调。回调将保持活动状态,直到LifecycleOwner达到DESTROYED状态或使用相同的requestKey调用clearFragmentResultListener。
要将数据从片段B传递回片段A,首先在片段A(接收结果的片段)上设置一个结果侦听器。在片段A的FragmentManager上调用setFragmentResultListener(),如下图所示:
在您的BottomSheet类中:
在前面的fragment/parent fragment中,需要实现FragmentResultListener:
yfwxisqw3#
将数据从当前
fragment/bottom sheet fragment
传递到前一个片段/Activity的正确方法是-底部工作表要从中传递数据的片段
需要数据的活动/片段