В приложении, над которым я работаю, есть фрагмент, который пользователь должен заполнить до 6 EditText
.Каждая пара EditText
представляет тип и описание адреса пользователя (как в «Квартире» в качестве Типа и «1201» в качестве описания).По данным бразильской почтовой службы, можно добавить до 3 дополнений.
По умолчанию я показываю одну пару EditText
, которая представляет первое дополнение.Есть кнопка, позволяющая пользователю добавить еще два дополнения к адресу.
Я хочу использовать LiveData
и DataBinding
для обновления массива дополнений в моей ViewModel, но он не работает, и я понятия не имеюпочему.
Можно ли работать с массивами и MutableLiveData
?
XML
<android.support.design.widget.TextInputLayout
android:id="@+id/tipo1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView">
<android.support.design.widget.TextInputEditText
android:id="@+id/tipo1edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Tipo 1"
android:text="@={viewModel.complementoList.getValues().get(0).descricao}" />
</android.support.design.widget.TextInputLayout>
ViewModel
private MutableLiveData<ArrayList<Complemento>> complementoList;
public MutableLiveData<ArrayList<Complemento>> getComplementoList() {
if (complementoList == null) {
complementoList = new MutableLiveData<>();
ArrayList<Complemento> arrayComplemento = new ArrayList<>();
arrayComplemento.add(new Complemento());
arrayComplemento.add(new Complemento());
arrayComplemento.add(new Complemento());
complementoList.setValue(arrayComplemento);
}
return complementoList;
}
Фрагмент
final Observer<ArrayList<Complemento>> complementoList = new Observer<ArrayList<Complemento>>() {
@Override
public void onChanged(@Nullable ArrayList<Complemento> complementos) {
//update stuff here
}
};
mViewModel.getComplementoList().observe(this, complementoList);