【问题标题】:android callback to dialogfragment from fragment through viewpagerandroid通过viewpager从片段回调到dialogfragment
【发布时间】:2020-02-25 23:05:01
【问题描述】:

大部分 Q/A 处理片段 -> 对话片段通信。我的情况正好相反,我一直未能找到能够从片段与使用 viewpager 的对话片段进行通信的想法或方法。

对话框片段有一个viewpager,它使用FragmentStatePagerAdapter 来加载不同的片段。只有2个片段。片段 1 提出了一些问题,片段 2 显示了结果。片段 1 需要在完成加载片段 2 的问题后向对话片段发送命令。

我尝试过使用接口,但应用程序崩溃,因为片段的onAttach 中的侦听器为空。我还尝试为所有其他人继承一个基本对话框片段类,但也证明不成功。

我可能遗漏了一些明显的东西,或者我的流程不正确。有人对此有什么想法或建议吗?

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    以防其他人出现并想知道如何解决这个问题。我通过将对话框片段 (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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多