Как использовать привязку данных с помощью «когда» onClickListener в Kotlin - PullRequest
1 голос
/ 25 июня 2019

Я использую более раннюю библиотеку 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();
  }
}

Без ButterKnife;

 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 -> {
            }
        }
    }

Нажмите на процесс, что я могу сделать.Я хочу сделать это с помощью переключателя или когда.Похоже, плохой код написания отдельных 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 ]

2 голосов
/ 25 июня 2019

Чтобы получить View идентификатор, вам нужно позвонить binding.btn.id.Но привязка данных предлагает использовать ViewModel и обрабатывать клики внутри layout.xml

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

Объяснение можно найти на документах разработчика

1 голос
/ 25 июня 2019

Точно так же, как и без ножа, код фрагмента onClick


android {... dataBinding {enabled = true}}


Только изменение

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

и в xml. Поместите свой xml в этот тег

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

0 голосов
/ 25 июня 2019

сначала в kotlin вам не нужно присваивать вид из макета, вы можете использовать прямой идентификатор в качестве представления, который setcontentview.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...