Как я могу добавить и отобразить элемент в репозиторий в конце списка в 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)
    }
}

Ответы (0 шт):