Я реорганизую свою деятельность, чтобы использовать NavigationComponent. В моей деятельности перед рефакторингом у меня была кнопка, которая в верхней части Навигации выполняла некоторые бизнес-логики c в фоновом режиме при нажатии.
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:onClick="@{() -> parentViewModel.pay()}"
/>
Кажется, что этот метод onClick является тем же, который используется для навигации в NavigationComponent, потому что я не могу использовать их оба одновременно. Если я раскомментирую проблемную c строку
android: onClick = "@ {() -> parentViewModel.pay ()}
бизнес-логика c вызывается, но навигация перестает работать. Я создал действительно хакерский обходной путь, в котором я вызываю необходимые бизнес-логики c в onViewCreated фрагмента, к которому осуществляется навигация, однако это просто не обрежет его в долгосрочной перспективе .
Вот так я сейчас вызываю бизнес-логи c из onViewCreated и устанавливаю навигацию по кнопке.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
parentViewModel.pay()
view.findViewById<View>(R.id.next_button)?.setOnClickListener(
Navigation.createNavigateOnClickListener(R.id.next_action)
)
}