Navigation Architecture Component - Action Navigation with lambda expression
Replace the brackets after
.setOnClickListener
with parentheses
view.findViewById<Button>(R.id.navigate_action_bt)?.setOnClickListener {
Navigation.createNavigateOnClickListener(R.id.go_to_step_one, null)
}
view.findViewById<Button>(R.id.navigate_action_bt)?.setOnClickListener(
Navigation.createNavigateOnClickListener(R.id.go_to_step_one, null)
)
Well, that's the proper way of working. The method Navigation.createNavigateOnClickListener()
returns a View.OnClickListener
and according to the docs the proper way of assiging it is by using, even in Kotlin:
button.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.next_fragment, null));
If you using the method inside the lambda, the lambda itself is the click listener so you're returning a click listener inside the click listener, that's why it isn't working. It's like doing this:
button.setOnClickListener {
View.OnClickListener {
Toast.makeText(this, "hi", Toast.LENGTH_LONG).show()
}
}
What you might be intrested in is this:
view.findViewById<Button>(R.id.navigate_action_bt)?.setOnClickListener { view ->
view.findNavController().navigate(R.id.go_to_step_one)
}
Which will perform the navigation transition on button click.