android - android通过viewpager从片段回调到dialogfragment
问题描述
大多数 Q/A 处理片段 -> 对话片段通信。我的情况正好相反,我一直未能找到能够从片段通信到使用 viewpager 的对话框片段的想法或方法。
对话框片段有一个 viewpager,它使用 aFragmentStatePagerAdapter
来加载不同的片段。只有2个片段。片段 1 提出了一些问题,片段 2 显示了结果。片段 1 需要在完成加载片段 2 的问题后向对话片段发送命令。
我尝试使用接口,但应用程序崩溃,因为onAttach
片段的侦听器为空。我还尝试为所有其他人继承一个基本对话框片段类,但这也被证明是不成功的。
我可能遗漏了一些明显的东西,或者我的流程不正确。有人对此有任何想法或建议吗?
解决方案
以防其他人出现并想知道如何解决这个问题。我通过将对话框片段 (FragmentNewTrips) 类传递给 viewpager 然后进入我将其设置为侦听器的子片段来解决这个问题。
因此,当我定义适配器时,我传递了作为对话片段的侦听器
AdapterPagerTrips(childFragmentManager, tripIds, this)
然后在适配器中,我将对话框片段类传递给需要它的相应片段,就像这样
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
}
}
推荐阅读
- python - 将列表插入到具有给定索引的二维数组中
- python - 如何从元组列表中删除重复项?
- javascript - 我无法使用 jspdf 为我的 pdf 渲染图像
- javascript - 组件事件上未调用 React.js 函数
- android - 如何通过放置在项目的 app 文件夹中来访问 google 凭据 json 文件以及如何将该路径传递给 GoogleCredentials
- python-3.x - 无法从 HTML BeautifulSoup 对象中提取 url
- c++ - 从特定键开始迭代地图
- c++ - 处理统一网格中的碰撞
- reactjs - React Context API,Hook 加载两次。一次没有数据,一次有数据
- mysql - 输出记录不重复