我正在使用JetPack库的导航功能。
在导航图中包含两个片段。
必须从TitleFragment
导航到GameFragment
与点击按钮,这是在TitleFragment。
我在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视图中设置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 - {}