Привязка данных setOnClickListener не вызывается - PullRequest
0 голосов
/ 28 марта 2019

Я делаю учебник по Android Kotlin по Udacity, но мой код работает не так, как ожидалось.Пожалуйста, посмотрите на мой код, почему не работает.Проблема в том, что binding.doneButton.setOnClickListener не запущен.

Это мой MainActivity.kt

package hu.webfeszek.aboutme

import android.content.Context
import android.os.Bundle
import android.util.Log
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
// import kotlinx.android.synthetic.main.activity_main.*
import hu.webfeszek.aboutme.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        setContentView(R.layout.activity_main)

        binding.doneButton.setOnClickListener {
            // This code does running never
            Log.i("LOG_ME", binding.doneButton.text.toString())
            addNickName(it)
        }
    }

    private fun addNickName(view:View) {
    }
}

Я добавил <layout> в мой activity_main.xml и 3 строки в build.gradle:

dataBinding {
        enabled = true
    }

1 Ответ

3 голосов
/ 28 марта 2019

Обязательно перестраивайте проект каждый раз, когда вы что-то меняете при использовании привязки данных, потому что вам нужно генерировать код для каждого внесенного вами изменения. Если вы используете Android Studio, выполните перестройку проекта. Также удалите setContentView(R.layout.activity_main) Вам не нужна эта строка, так как вы используете привязку данных.

Кроме того, ваша кнопка xml должна выглядеть примерно так:

     <Button
            android:text="Done"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/done_button"
            style="@style/Widget.AppCompat.Button.Colored"/>

Ваш класс Kotlin наСоздать:

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

    binding.doneButton.setOnClickListener {
        addNickname(view:View)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...