Я использую Activity с представлениями FAB и ViewPager во фрагментах. Используя интерфейс во Fragment, реализованный Activity, щелчок Fab отправляется Fragment, чтобы подготовить данные на основе фрагмента его viewModel, чтобы показать их в childFragment прежде всего.
class ProductActivity : AppCompatActivity(), ProductFragment.FabListener {
override fun onAttachFragment(fragment: Fragment) {
super.onAttachFragment(fragment)
if (fragment is ProductFragment) {
fragment.setOnActivityFabClickListener(this)
}
}
override fun getFab(): FloatingActionButton {
return product_list_fab
}
}
In Fragment:
class ProductFragment : Fragment() {
private lateinit var productListFabListener: ProductListFabListener
interface ProductListFabListener {
fun getFab(): FloatingActionButton
}
fun setOnActivityFabClickListener(callback: ProductListFabListener) {
this.productListFabListener = callback
}
productListFabListener.getFab().setOnClickListener {
val productListDialog = ProductListFragment.newInstance(
viewModel.getMonthEventsList())
productListDialog.show(childFragmentManager, "products")
}
}
Проблема в том, что Fab-клик из Activity вызывает последний созданный фрагмент, который не виден, и результирующие данные, которые нужно отобразить, не связаны с текущим отображением Fragment.
Как связать щелчок Activity FloatingActionButton с текущим видимым представлением во Fragment?