android 从 fragment 通过 viewpager 回调到 dialogfragment
android callback to dialogfragment from fragment through viewpager
大多数 Q/A 处理片段 -> 对话片段通信。我的情况恰恰相反,我一直未能找到能够从片段与使用 viewpager 的对话片段进行通信的想法或方法。
对话框片段有一个 viewpager,它使用 FragmentStatePagerAdapter
来加载不同的片段。只有2个片段。片段 1 提出了一些问题,片段 2 显示了结果。片段 1 在完成加载片段 2 的问题后需要向对话片段发送命令。
我试过使用界面,但应用程序崩溃,因为片段的 onAttach
中的侦听器为空。我也试过为所有其他人继承一个基本对话框片段 class,但也被证明是不成功的。
我可能遗漏了一些明显的东西,或者我的过程不正确。有人对此有想法或建议吗?
以防其他人出现并想知道如何解决这个问题。我通过将对话框片段 (FragmentNewTrips) class 通过 viewpager 然后传递到我将其设置为侦听器的子片段来解决这个问题。
所以,当我定义适配器时,我传递了作为对话片段的侦听器
AdapterPagerTrips(childFragmentManager, tripIds, this)
然后在适配器中我将对话片段 class 传递给需要它的相应片段
class AdapterPagerTrips (fragmentManager: FragmentManager, val tripIds: ArrayList<String?>,
val listener: FragmentNewTrips):FragmentStatePagerAdapter(fragmentManager,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
// 2
override fun getItem(position: Int): Fragment {
if (position == 0) return FragmentNewTripsTypes.newInstance(listener)
return FragmentNewTripsResults.newInstance(tripIds, listener)
}
// 3
override fun getCount(): Int {
return 2
}
}
并且每个片段都有一个可以设置侦听器的伴随对象
companion object {
fun newInstance(tripIds: ArrayList<String?>, listener: FragmentNewTrips) = FragmentNewTripsResults().apply {
arguments = Bundle().apply { putStringArrayList(TRIPIDS, tripIds) }
this.listener = listener
}
}
大多数 Q/A 处理片段 -> 对话片段通信。我的情况恰恰相反,我一直未能找到能够从片段与使用 viewpager 的对话片段进行通信的想法或方法。
对话框片段有一个 viewpager,它使用 FragmentStatePagerAdapter
来加载不同的片段。只有2个片段。片段 1 提出了一些问题,片段 2 显示了结果。片段 1 在完成加载片段 2 的问题后需要向对话片段发送命令。
我试过使用界面,但应用程序崩溃,因为片段的 onAttach
中的侦听器为空。我也试过为所有其他人继承一个基本对话框片段 class,但也被证明是不成功的。
我可能遗漏了一些明显的东西,或者我的过程不正确。有人对此有想法或建议吗?
以防其他人出现并想知道如何解决这个问题。我通过将对话框片段 (FragmentNewTrips) class 通过 viewpager 然后传递到我将其设置为侦听器的子片段来解决这个问题。
所以,当我定义适配器时,我传递了作为对话片段的侦听器
AdapterPagerTrips(childFragmentManager, tripIds, this)
然后在适配器中我将对话片段 class 传递给需要它的相应片段
class AdapterPagerTrips (fragmentManager: FragmentManager, val tripIds: ArrayList<String?>,
val listener: FragmentNewTrips):FragmentStatePagerAdapter(fragmentManager,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
// 2
override fun getItem(position: Int): Fragment {
if (position == 0) return FragmentNewTripsTypes.newInstance(listener)
return FragmentNewTripsResults.newInstance(tripIds, listener)
}
// 3
override fun getCount(): Int {
return 2
}
}
并且每个片段都有一个可以设置侦听器的伴随对象
companion object {
fun newInstance(tripIds: ArrayList<String?>, listener: FragmentNewTrips) = FragmentNewTripsResults().apply {
arguments = Bundle().apply { putStringArrayList(TRIPIDS, tripIds) }
this.listener = listener
}
}