如何让片段中的多个视图调用在片段 class 中声明的同一个 onClick 函数?
How to have multiple views in fragment call the same onClick function declared in the fragment class?
我在一个片段中有大约 8 个不同的按钮,它们都应该调用相同的函数。我在 xml 中设置了他们的 tag
属性 来调用该函数。我在片段 class 中声明了该函数,但在调用它时,应用程序崩溃并出现错误 java.lang.IllegalStateException: Could not find method onTaskButtonClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton with id 'btn_playpause'
我发现我必须在承载该片段的 Activity 中实现该功能。但是,我想避免这种情况,因为 Activity 可能包含 5 个以上的片段,如果所有片段函数都在那个 Activity 中实现,它将变得太大,我不喜欢。
编辑
基本上,我想避免这种情况:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn_playpause.setOnClickListener { onTaskButtonClick(view) }
btn_previous_track.setOnClickListener { onTaskButtonClick(view) }
btn_next_track.setOnClickListener { onTaskButtonClick(view) }
btn_volume_down.setOnClickListener { onTaskButtonClick(view) }
btn_volume_up.setOnClickListener { onTaskButtonClick(view) }
btn_mute.setOnClickListener { onTaskButtonClick(view) }
}
fun onTaskButtonClick(view: View) {
presenter.onTaskButtonPressed(view.tag.toString())
}
在 xml.
中让按钮指向该功能似乎更容易
您可以使用可变参数。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setClickListenerOnViews(
btn_playpause,
btn_previous_track,
btn_next_track,
btn_volume_down,
btn_volume_up,
btn_mute
)
}
private fun setClickListenerOnViews(vararg views: View) {
views.forEach {
it.setOnClickListener { presenter.onTaskButtonPressed(it.tag.toString()) }
}
}
我在一个片段中有大约 8 个不同的按钮,它们都应该调用相同的函数。我在 xml 中设置了他们的 tag
属性 来调用该函数。我在片段 class 中声明了该函数,但在调用它时,应用程序崩溃并出现错误 java.lang.IllegalStateException: Could not find method onTaskButtonClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton with id 'btn_playpause'
我发现我必须在承载该片段的 Activity 中实现该功能。但是,我想避免这种情况,因为 Activity 可能包含 5 个以上的片段,如果所有片段函数都在那个 Activity 中实现,它将变得太大,我不喜欢。
编辑
基本上,我想避免这种情况:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn_playpause.setOnClickListener { onTaskButtonClick(view) }
btn_previous_track.setOnClickListener { onTaskButtonClick(view) }
btn_next_track.setOnClickListener { onTaskButtonClick(view) }
btn_volume_down.setOnClickListener { onTaskButtonClick(view) }
btn_volume_up.setOnClickListener { onTaskButtonClick(view) }
btn_mute.setOnClickListener { onTaskButtonClick(view) }
}
fun onTaskButtonClick(view: View) {
presenter.onTaskButtonPressed(view.tag.toString())
}
在 xml.
中让按钮指向该功能似乎更容易您可以使用可变参数。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setClickListenerOnViews(
btn_playpause,
btn_previous_track,
btn_next_track,
btn_volume_down,
btn_volume_up,
btn_mute
)
}
private fun setClickListenerOnViews(vararg views: View) {
views.forEach {
it.setOnClickListener { presenter.onTaskButtonPressed(it.tag.toString()) }
}
}