如何在Kotlin中通过“ when” onClickListener使用数据绑定

时间:2019-06-25 08:04:43

标签: android kotlin

我使用了较早的ButterKnife库。这就是我在多个对象上使用click事件的方式。

@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
  if (door.hasPrizeBehind()) {
    Toast.makeText(this, "You win!", LENGTH_SHORT).show();
  } else {
    Toast.makeText(this, "Try again", LENGTH_SHORT).show();
  }
}

没有黄油刀;

 override fun onClick(v: View?) {
        when (v!!.id) {
            R.id.tv -> {
                Toast.makeText(this, "You are click textview", Toast.LENGTH_SHORT).show()
            }
            R.id.btn -> {
                Toast.makeText(this, "You are click button.", Toast.LENGTH_SHORT).show()
            }
            else -> {
            }
        }
    }

单击该过程我可以做什么。我想使用switch或何时执行此操作。听起来像是编写单个setOnClickListener的错误代码。

   binding.btnFive.setOnClickListener { MyLog.log("five") }
//or
        btnFour.setOnClickListener { MyLog.log("four") }

但是我现在使用数据绑定。我该如何使用数据绑定?

我在寻找什么;

when(binding){ //of course, this doesn't work. exemplary.
btnFirst->{}
btnSecond->{}
}

所以我不想一直写setOnClickListener{}。我该怎么做?

3 个答案:

答案 0 :(得分:2)

要获取View的ID,您必须致电binding.btn.id。但是数据绑定建议使用ViewModel并在layout.xml内单击时进行处理

<Button
  .....
  android:onClick="@{()-> viewModel.btnClick()}"
  ..../>

您可以在developer docs

中找到说明。

答案 1 :(得分:1)

就像没有黄油刀onClick代码段一样


android {     ...     dataBinding {         启用=真     } }


仅更改

setContentView(layout_id)到DataBindingUtil.setContentView(this,layout_id)

和xml中 将您的xml放在此标记中

https://developer.android.com/topic/libraries/data-binding

答案 2 :(得分:0)

首先在kotlin,您不需要布局中的任何分配视图,您可以将直接ID用作setcontentview的视图。