android обратный вызов фрагмента диалога из фрагмента через viewpager - PullRequest
0 голосов
/ 26 февраля 2020

Большая часть вопросов и ответов связана с фрагментом -> диалоговым фрагментом связи. Мой сценарий как раз обратный, и мне не удалось найти идею или способ связи из фрагмента с фрагментом диалога, использующим пейджер.

Фрагмент диалога имеет пейджер, и он использует FragmentStatePagerAdapter для загрузки различных фрагментов. Есть только 2 фрагмента. Фрагмент 1 задает несколько вопросов, а фрагмент 2 показывает результаты. Фрагмент 1 должен послать команду фрагменту диалога, когда это будет сделано с вопросами для загрузки фрагмента 2.

Я пытался использовать интерфейс, но приложение вылетает, поскольку слушатель равен нулю в onAttach для фрагменты. Я также пытался унаследовать базовый класс фрагмента диалога для всех остальных, но это также оказалось неудачным.

Возможно, я упускаю что-то очевидное или мой процесс неверен. У кого-нибудь есть идея или предложение сделать это?

1 Ответ

0 голосов
/ 26 февраля 2020

В случае, если кто-то еще придет и будет интересоваться, как go об этом. Я решил эту проблему, передав класс фрагмента диалога (FragmentNewTrips) через панель просмотра, а затем в дочерний фрагмент, где я установил его в качестве слушателя.

Итак, когда я определил адаптер, я передал слушатель, который был фрагментом диалога

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
    }
}
...