findNavController с использованием контекста

#android #kotlin

#Android #kotlin

Вопрос:

Я пытаюсь использовать findNavController в моем адаптере привязки, используя контекст представления.

Как вы думаете, это возможно?

Это мой код :

     @BindingAdapter("onClickForDetails", "fragment")
fun setOnClickListenerForDetails(
    view: View,
    digitalService: DigitalService,
) {
    view.setOnClickListener {
        val navDirections =
            BottomNavGraphDirections.actionFragmentToServiceDetailsFragment(
                packageName = digitalService.packageName,
                categoryId = digitalService.category
            )
        ???.findNavController().navigate(navDirections)
    }

    view.setOnLongClickListener {
        showServicesDetailsDialog(view.context, digitalService)
        return@setOnLongClickListener true
    }
}
  

Комментарии:

1. Navigation.findNavController(view); ?

Ответ №1:

Я думаю, это сработает, если ваше представление является представлением в NavHost. Вот как выполняется расширение для представления:

 /**
 * Find a [NavController] associated with a [View].
 *
 * Calling this on a View not within a [NavHost] will result in an
 * [IllegalStateException]
 */
fun View.findNavController(): NavController =
        Navigation.findNavController(this)
  

Теперь я бы не рекомендовал этого, вы передаете представление только для этого. Я бы рекомендовал создать интерфейс для события onClick и обрабатывать навигацию в действии.