У меня есть действие, которое должно отображать нефиксированное количество фрагментов.Каждый фрагмент получит элемент MutableList Customer
, и его компоненты должны быть связаны со свойством в этом Customer
классе.
Я создал класс следующим образом:
class Customer constructor(
val name: LiveData<String>
val email: LiveData<String>
)
В моем ViewModel
я создал MutableList
из Customer
:
class CustomerViewModel: ViewModel() {
val customers: MutableList<Customer> = mutableListOf()
}
Затем я динамически создаю фрагменты:
for (i in 0..customerCount) {
val fragment = FragmentCustomer.newInstance(viewModel.customers.get(i))
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContainer, fragment, "FragmentCustomer_$i")
.commit()
}
Заказчикэкземпляр хранится в переменной во фрагменте, а затем я делаю DataBindingUtil.inflate
:
var binding: FragmentCustomerBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_customer, container, false)
var view = binding.root
binding.model = palavra
return view
и в макете фрагмента:
<EditText
android:id="@+id/nameTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:text="@{model.name}"
android:onTextChanged="@={model.name}" />
Это вызывает ****/ data binding error ****msg:The expression modelName.getValue() cannot be inverted: There is no inverse for method getValue, you must add an @InverseMethod annotation to the method to indicate which method should be used when using it in two-way binding expressions
.
Как я могу это исправить?И еще один «бонусный» вопрос: нужно ли мне сохранять содержимое просмотра с помощью saveState для таких событий, как onDestroy
, или ViewModel справится с этим для меня?