导航点击处理程序问题 - JETPACK - KOTLIN

Issue with the Navigation Click Handler - JETPACK - KOTLIN

我正在使用 JetPack 库的导航功能。

导航图中包含两个片段。

必须通过单击 TitleFragment 内的按钮从 TitleFragment 导航到 GameFragment

我在 TitleFragment 中做了如下操作来点击那个按钮:

binding.playButton.setOnClickListener {
        Navigation.createNavigateOnClickListener(R.id.action_titleFragment_to_gameFragment)
        //Navigation.findNavController(it).navigate(R.id.gameFragment)
    }

其中 action_titleFragment_to_gameFragment 是操作 ID。

使用了 createNavigateOnClickListener 方法,但它不起作用。相反评论第二行正在工作。

Navigation.createNavigateOnClickListener(R.id.action_titleFragment_to_gameFragment)

可能有什么问题

导航图内容如下:

 <fragment
    android:id="@+id/titleFragment"
    android:name="com.example.android.navigation.TitleFragment"
    android:label="fragment_title"
    tools:layout="@layout/fragment_title" >
    <action
        android:id="@+id/action_titleFragment_to_gameFragment"
        app:destination="@id/gameFragment" />
</fragment>
<fragment
    android:id="@+id/gameFragment"
    android:name="com.example.android.navigation.GameFragment"
    android:label="fragment_game"
    tools:layout="@layout/fragment_game" />

您可以按照以下两种模式在 android 中的视图上设置点击监听器,

  • 通过传递 class 实现 View.OnClickListener 的实例,您可以在其中重写 OnClick 方法
  • 由于 View.OnClickListener 是 SAM,您可以传递 lambda 而不是实现 View.OnClickListener 接口。

button.setOnClickListener{ ... } 需要一个 lambda,button.setOnClickListener( ... ) 需要一个 View.OnClickListener.

的实例

所以在你的情况下,因为 Navigation.createNavigateOnClickListener returns 类型的对象 View.OnClickListener 使用 round brackets - () curly brackets - {}