Я изучаю Android и ViewModel и для улучшения знаний. Я занимаюсь разработкой проекта Android, и цель состоит в том, чтобы увеличить и реорганизовать его вместе с новыми знаниями. В данный момент я использую только ViewModel, LiveData и Activity (без фрагмента). Проект представляет собой книгу контактов, на первом экране есть обзор переработчика для отображения контактов, а внизу есть Fab для go на втором экране. На втором экране есть несколько полей для создания нового контакта. Для сохранения контактов используется атрибут stati c. На первом экране я создаю ViewModel с LiveData для обновления RecyclerView, а на втором экране я создаю ViewModel для получения данных и отправки в хранилище для статического сохранения контакта. Я хотел бы знать, как можно обновить liveata, когда я сохраняю контакт во втором экране, чтобы при его закрытии и go назад к первому экрану обновлялось представление переработчика. Я могу зарегистрировать контакт, но когда я возвращаюсь к предыдущему экрану, новое значение не отображается, я прошу прощения, если это глупый вопрос. Вот мой код:
AgendaListActivity (MainActivity)
class AgendaListActivity : AppCompatActivity() {
private lateinit var viewModel: AgendaListViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_agenda_list)
viewModel = ViewModelProviders.of(this).get(AgendaListViewModel::class.java)
val observer = Observer<List<Contact>> {
agenda_list.apply {
layoutManager = LinearLayoutManager(this@AgendaListActivity, RecyclerView.VERTICAL, false)
setHasFixedSize(true)
adapter = AgendaListAdapter(it)
}
}
viewModel.contactList.observe(this, observer)
activity_agenda_list_fabAddContact.setOnClickListener {
onClickAddContact()
}
viewModel.getContacts()
}
override fun onResume() {
super.onResume()
}
fun onClickAddContact() {
startActivity(Intent(this, ContactFormActivity::class.java))
}
}
AgendaListViewModel
class AgendaListViewModel: ViewModel() {
var contactList: MutableLiveData<List<Contact>> = MutableLiveData()
var contactRepository:ContactRepository = ContactRepository()
fun getContacts() {
contactList.value = contactRepository.getContactList()
}
}
ContactFormActivity
class ContactFormActivity : AppCompatActivity() {
private lateinit var name: String
private lateinit var phone: String
private lateinit var email: String
private lateinit var viewModel: ContactFormViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_contact_form)
viewModel = ViewModelProviders.of(this).get(ContactFormViewModel::class.java)
activity_contact_form_btnAddContact.setOnClickListener {
onClickAddContact()
}
}
fun onClickAddContact() {
getDataFromEditText()
setDataToViewModel()
viewModel.saveContact()
finish()
}
fun getDataFromEditText() {
name = activity_contact_form_editName.text.toString()
phone = activity_contact_form_editPhone.text.toString()
email = activity_contact_form_editEmail.text.toString()
}
fun setDataToViewModel() {
viewModel.setName(name)
viewModel.setPhone(phone)
viewModel.setEmail(email)
}
}
ContactFormViewModel
class ContactFormViewModel: ViewModel() {
private var name: String = ""
private var phone: String = ""
private var email: String = ""
private var contactRepository = ContactRepository()
private var contact = Contact()
fun saveContact() {
setContact()
contactRepository.addContact(contact)
}
private fun setContact() {
contact.setName(name)
contact.setPhone(phone)
contact.setEmail(email)
}
fun setName(name: String) {
this.name = name
}
fun setPhone(phone: String) {
this.phone = phone
}
fun setEmail(email: String) {
this.email = email
}
}
ContactRepository
class ContactRepository {
companion object {
var contactList: MutableList<Contact> = ArrayList<Contact>()
}
fun addContact(contact: Contact) {
contactList.add(contact)
}
fun getContactList(): MutableList<Contact> {
return ArrayList<Contact>(contactList)
}
}
Контакт (модель)
class Contact {
private var name: String = ""
private var phone: String = ""
private var email: String = ""
fun setName(name: String) {
this.name = name
}
fun setPhone(phone: String) {
this.phone = phone
}
fun setEmail(email: String) {
this.email = email
}
fun getName(): String {
return name
}
}