Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 具有相同效果的两个OnClick侦听器(样板)_Android_Kotlin - Fatal编程技术网

Android 具有相同效果的两个OnClick侦听器(样板)

Android 具有相同效果的两个OnClick侦听器(样板),android,kotlin,Android,Kotlin,在我的应用程序中,我遇到如下情况: val listener: (View) -> Unit = { ... } videoImage.setOnClickListener(listener) videoText.setOnClickListener(listener) arrayOf(videoImage, videoText).forEach { it.setOnClickListener { ... } } videoImage.setOnClickListener{

在我的应用程序中,我遇到如下情况:

val listener: (View) -> Unit = { ... }

videoImage.setOnClickListener(listener)
videoText.setOnClickListener(listener)
arrayOf(videoImage, videoText).forEach {

    it.setOnClickListener { ... }
}
videoImage.setOnClickListener{
menuClickListener?.videoListClicked()
}
videoText.setOnClickListener{
menuClickListener?.videoListClicked()
}

<> P>两个侦听器都有相同的效果,我考虑这个样板代码。这种情况比较常见,因此我想知道针对这些情况的最优雅和最好的解决方案。

有很多解决方案,最优雅的解决方案实际上是一个意见问题。不过我觉得这两个是最简洁的

声明单个
OnClickListener
您可以声明一个用于两种情况的
OnClickListener
,如下所示:

val listener: (View) -> Unit = { ... }

videoImage.setOnClickListener(listener)
videoText.setOnClickListener(listener)
arrayOf(videoImage, videoText).forEach {

    it.setOnClickListener { ... }
}
使用函数 您可以将单击重定向到其他功能:

videoImage.setOnClickListener { sharedClickFunction() }
videoText.setOnClickListener { sharedClickFunction() }

如果您有多个视图,也可以将它们放在一个数组中并进行迭代,但这似乎有点过分。大概是这样的:

val listener: (View) -> Unit = { ... }

videoImage.setOnClickListener(listener)
videoText.setOnClickListener(listener)
arrayOf(videoImage, videoText).forEach {

    it.setOnClickListener { ... }
}

解决这个问题的方法有很多,其中最优雅的方法实际上是一种观点。不过我觉得这两个是最简洁的

声明单个
OnClickListener
您可以声明一个用于两种情况的
OnClickListener
,如下所示:

val listener: (View) -> Unit = { ... }

videoImage.setOnClickListener(listener)
videoText.setOnClickListener(listener)
arrayOf(videoImage, videoText).forEach {

    it.setOnClickListener { ... }
}
使用函数 您可以将单击重定向到其他功能:

videoImage.setOnClickListener { sharedClickFunction() }
videoText.setOnClickListener { sharedClickFunction() }

如果您有多个视图,也可以将它们放在一个数组中并进行迭代,但这似乎有点过分。大概是这样的:

val listener: (View) -> Unit = { ... }

videoImage.setOnClickListener(listener)
videoText.setOnClickListener(listener)
arrayOf(videoImage, videoText).forEach {

    it.setOnClickListener { ... }
}

我不是故意粗鲁,但我得说我没什么印象。这在我看来仍然是丑陋和陈词滥调。(没有什么不利于你的,我会投你的票)你能举个例子说明你希望它看起来怎么样吗?甚至在更理论的伪代码中?我只是不明白你怎么可能让它更简洁,你必须在某个地方声明行为,你必须把它绑定在某个地方,这样才能确保它尽可能简洁?奎托斯,你向点击听众提出了一个问题,@HenryTwist为你的问题提供了两种解决方案。也就是说,与使用单击侦听器相比,有更多的方法来处理单击,我认为您需要的是视图绑定或潜在的数据绑定。例如,我可以将要放置单击侦听器的两个视图放在同一布局或视图组中,并将单击侦听器放在该视图组中。但这些都是xml而不是代码中的解决方案。好的,我明白你的意思。如果在第二天之前没有人给出更好的答案,我会接受的。一切都好,不用担心;)我明白了,我能想到的唯一类似的代码解决方案是将它们放在一个数组中并进行迭代,但我认为这有点过分了!无论如何,可能比引入一个额外的
视图组
更有效,但我想看看是否有其他人有任何其他的代码内解决方案!我不是故意粗鲁,但我得说我没什么印象。这在我看来仍然是丑陋和陈词滥调。(没有什么不利于你的,我会投你的票)你能举个例子说明你希望它看起来怎么样吗?甚至在更理论的伪代码中?我只是不明白你怎么可能让它更简洁,你必须在某个地方声明行为,你必须把它绑定在某个地方,这样才能确保它尽可能简洁?奎托斯,你向点击听众提出了一个问题,@HenryTwist为你的问题提供了两种解决方案。也就是说,与使用单击侦听器相比,有更多的方法来处理单击,我认为您需要的是视图绑定或潜在的数据绑定。例如,我可以将要放置单击侦听器的两个视图放在同一布局或视图组中,并将单击侦听器放在该视图组中。但这些都是xml而不是代码中的解决方案。好的,我明白你的意思。如果在第二天之前没有人给出更好的答案,我会接受的。一切都好,不用担心;)我明白了,我能想到的唯一类似的代码解决方案是将它们放在一个数组中并进行迭代,但我认为这有点过分了!无论如何,可能比引入一个额外的
视图组
更有效,但我想看看是否有其他人有任何其他的代码内解决方案!