setTextColor не работает с LiveData и DataBinding - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь с помощью LiveData связать textColor и представление. Для того, чтобы изменить цвет представления с LiveData.

У меня есть следующий макет:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>
    <variable name="fragment" type="com.package.RegisterFragment" />
    <variable name="viewModel" type="com.package.RegistrationViewModel" />
</data>
[......]

                <androidx.appcompat.widget.AppCompatEditText
                    android:id="@+id/password_field"
                    android:background="@drawable/rounded_edit_text"
                    android:layout_width="match_parent"
                    android:layout_height="45dp"
                    android:paddingTop="10dp"
                    android:paddingBottom="10dp"
                    android:text="@={viewModel.password}"
                    android:textColor="@{context.getResources().getColor(viewModel.passwordColor)}"
                    android:paddingRight="10dp"
                    android:paddingLeft="20dp"
                    android:inputType="textPassword"/>

И следующий код в моем фрагменте:

private var defaultTextColor: Int = android.R.color.black

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    val fragmentBinding: FragmentRegisterBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_register, container, false)
    fragmentBinding.fragment = this
    fragmentBinding.viewModel
    fragmentBinding.lifecycleOwner = this
    convertView = fragmentBinding.root

    viewModel = activity?.run {
        ViewModelProviders.of(this)[RegistrationViewModel::class.java]
    } ?: throw Exception("Invalid Activity")

    (viewModel as RegistrationViewModel).emailColor.value = defaultTextColor

Но мой цвет текста - solid белый. Кто-нибудь знает почему?

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я должен изменить свой XML следующим образом:

                <androidx.appcompat.widget.AppCompatEditText
                    android:id="@+id/password_field"
                    android:background="@drawable/rounded_edit_text"
                    android:layout_width="match_parent"
                    android:layout_height="45dp"
                    android:paddingTop="10dp"
                    android:paddingBottom="10dp"
                    android:text="@={viewModel.password}"
                    android:textColor="@{viewModel.passwordColor}"
                    android:paddingRight="10dp"
                    android:paddingLeft="20dp"
                    android:inputType="textPassword"/>

И в своем коде я изменил цвет на:

private var defaultTextColor: Int = Color.BLACK

Отсутствующая модель представления фактически не действует функционирование приложения (правда, странно).

0 голосов
/ 16 января 2020

В XML я вижу вашу привязку с паролем passwordColor, поэтому вы должны изменить значение passwordColor:

(viewModel as RegistrationViewModel).passwordColor.value = defaultTextColor

Параметры в xml и liveata одинаковы.

...