【问题标题】:Issue with the Navigation Click Handler - JETPACK - KOTLIN导航点击处理程序的问题 - JETPACK - KOTLIN
【发布时间】:2021-01-21 13:05:53
【问题描述】:

我正在使用 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 kotlin navigation android-jetpack android-navigation-graph


    【解决方案1】:

    您可以通过以下两种模式在android中的视图上设置clicklistener,

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

    button.setOnClickListener{ ... } 需要一个 lambda,button.setOnClickListener( ... ) 需要一个 View.OnClickListener 的实例。

    因此,在您的情况下,由于Navigation.createNavigateOnClickListener 返回类型为View.OnClickListener 的对象,请使用round brackets - () curly brackets - {}

    【讨论】:

      猜你喜欢
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多