Я сделал макет, который нужно использовать для 2 POJO. Поэтому я создал такой интерфейс:
public interface GameItemParent {
...
boolean isChecked();
}
Один из дочерних классов:
public class FavoriteGame implements GameItemParent,Observable {
@SerializedName(SerCons.C_CHECKED) private int checked;
private PropertyChangeRegistry registry = new PropertyChangeRegistry();
public FavoriteGame() {
}
@Bindable public boolean isChecked() {
return checked == 1;
}
public void setChecked(boolean checked, boolean notifyObserver) {
this.checked = checked ? 1 : 0;
if (notifyObserver)
registry.notifyChange(this, BR.checked);
}
public void inverseChecked() {
setChecked(!isChecked(), true);
}
@Override public void addOnPropertyChangedCallback(OnPropertyChangedCallback callback) {
registry.add(callback);
}
@Override public void removeOnPropertyChangedCallback(OnPropertyChangedCallback callback) {
registry.remove(callback);
}
...
}
XML-файл, который прослушивает изменения isChecked:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<import type="android.view.View"/>
<variable
name="game"
type="com.consoleco.console.objectParents.GameItemParent"
/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
.../>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@{game.checked}"
android:visibility="@{game.hasCheckButton() ? View.VISIBLE : View.GONE}"
app:buttonTint="?attr/colorAccent"
app:layout_constraintBottom_toBottomOf="@+id/icon"
app:layout_constraintEnd_toEndOf="@+id/icon"
app:layout_constraintStart_toEndOf="@+id/icon"
app:layout_constraintTop_toBottomOf="@+id/icon"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Как вы заметили, я объявил интерфейс GameItemParent как данные игры. Потому что я должен использовать этот XML и для другого ребенка.
Теперь, когда я изменяю 'isChecked' во время выполнения, пользовательский интерфейс (на самом деле флажок) не получает изменения.