Как я могу добавить и отобразить элемент в репозиторий в конце списка в Kotlin?
У меня есть несколько полей EditText: Заголовок, Описание, Дата. Также есть кнопка Сохранить. Нажав на нее, поля должны быть проверены, что они не пустые, и если все правильно, то появится тост о том, что элемент был добавлен, экран добавления (NewItemActivity) закроется и новый элемент должен быть добавлен в репозиторий, и отображён в конце общего списка айтемов. Подскажите, как добавить и отобразить айтем в репозитории в конец списка с вызовом тоста и закрытием экрана? Я предположил, что ViewModel нужно сделать, но я не уверен. Если бы вы могли привести пример с подробным описанием, это было бы здорово.
NewItemActivity.kt
class NewItemActivity : AppCompatActivity() {
private val viewModel: NewItemViewModel by viewModels(factoryProducer = {
NewItemViewModel.Factory()
})
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new_item)
val saveButton = findViewById<Button>(R.id.saveButton)
saveButton.setOnClickListener {
val newItem = ItemModel(title = String(), description = String(), isFavorite = false, date = Date())
viewModel.saveNewItem(newItem)
// Toast.makeText(this, "New item added", Toast.LENGTH_SHORT).show()
// finish()
}
}
NewItemViewModel.kt
class NewItemViewModel(
private val repository: MyItemsRepository
) : ViewModel() {
fun saveNewItem(item: ItemModel) = repository.saveNewItem(item)
class Factory : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return NewItemViewModel(MyItemsRepositoryImpl.getInstance()) as T
}
}
}
MyItemsRepository.kt
interface MyItemsRepository {
val items: List<ItemModel>
fun saveNewItem(item: ItemModel)
}
MyItemsRepositoryImpl.kt
class MyItemsRepositoryImpl private constructor() : MyItemsRepository {
override val items: ArrayList<ItemModel> = arrayListOf(
ItemModel(
title = "Chapter 1",
description = "This chapter will tell us about something strange, horrible and fantastic, beautiful and peaceful.",
date = Calendar.getInstance().apply { set(2021, 0, 8) }.time,
isFavorite = false
),
)
...
override fun saveNewItem(item: ItemModel) {
items.add(item)
}
}