android 2-сторонняя привязка данных kotlin метод не вызывается - PullRequest
0 голосов
/ 03 августа 2020

Мне нужна двухсторонняя привязка данных в android модели просмотра.

Итак, в XML я помещаю это:

            <EditText
                android:text="@={login.username}"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:textColor="@color/colorWhite" />

В моей модели просмотра у меня есть :


    private val username = ObservableField<String>("")
    fun getUsername(): String? {
        Log.d("test",username.get())
        return username.get()
    }
    fun setUsername(username: String) {
        Log.d("test",username)
        this.username.set(username)
    }

Но забавно, что ни один из этих двух методов не вызывается. Как я могу это решить. Я не могу просто сделать их publi c и выставить их, чтобы другие классы могли просто изменить свою ссылку.

Узнав, val является неизменяемым, я сделал их publi c. Тем не менее, он не работает и удалил все эти, геттер и сеттер.

1 Ответ

0 голосов
/ 15 августа 2020

Здесь вы можете использовать LiveData. Если вы хотите, чтобы доступ к строке был частным, создайте

private val _username= MutableLiveData<String>("")

и объявите свою текущую открытую переменную, назначив ее частной:

val username: LiveData<String> = _username

Затем всякий раз, когда вам нужно обновить значение, вы публикуете новое значение в приватную переменную.

_username.postValue("new value")

ИЛИ

, если вы хотите не приватный доступ к значению, оставьте только первое и измените его доступ модификатор.

...