android - 使用嵌套约束布局的多个 View 单击事件(2.0.0 beta 2)

标签 android performance kotlin android-constraintlayout android-motionlayout

我使用 ConstraintLayout 创建了布局,并且 ConstraintLayout 允许您构建复杂的布局,而无需嵌套 View。就我而言,我想要多个 View 点击事件。

我尝试使用Group,因为您可以在代码中获取属于您的Group成员的ID列表,并设置点击监听器。

 fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
            referencedIds.forEach { id ->
                rootView.findViewById<View>(id).setOnClickListener(listener)
            }
        }

但是,从 ConstraintLayout 版本 2.0.0-beta2 开始,这似乎不起作用。此代码一直有效到 2.0.0-alpha3。我已经使用多个 ConstraintLayout 实现了,那么使用嵌套约束布局可以吗?

我正在使用 MotionLayout 和其他约束布局动画,因此我无法使用较低版本的 ConstraintLayout

最佳答案

群组引用 ID 的可用时间发生了变化。在2.0.0-beta2之前,它们可以在onCreate()中立即使用。似乎在 2.0.0-beta2 中,它们仅在布局后可用。我不确定这是否有记录,或者它是否只是一个副作用。

以下内容适用于 2.0.0-beta2:

class MainActivity : AppCompatActivity() {
    fun Group.setAllOnClickListener(listener: View.OnClickListener?) {
        referencedIds.forEach { id ->
            rootView.findViewById<View>(id).setOnClickListener(listener)
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Referenced ids are not available here but become available post-layout.
        layout.post {
            group.setAllOnClickListener(object : View.OnClickListener {
                override fun onClick(v: View) {
                    val text = (v as Button).text
                    Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()
                }
            })
        }
    }
}

关于android - 使用嵌套约束布局的多个 View 单击事件(2.0.0 beta 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57092965/

相关文章:

iOS 上的 CSS 过渡性能

java - Lambda 性能改进,Java 8 对比 11

java - Android如何在Java中使用Kotlin-Coroutine?

android - 要存储在缓存中的图像数组?

android - 如何停止在android中执行customlistview的getview方法?

android - 在我的android项目中实现facebook android sdk

android - 在 Android 应用程序中使用 startActivityForResult

c# - 简单基准测试中奇怪的性能提升

java - 如何处理不同viewModel之间的通信?

Android/Java 替代不需要上下文引用的 NSNotificationCenter