Вот заархивированный проект Android Studio, извините. за то, что вы не предоставили его вообще: https://www.slasheethecow.com/code/MooSavedState.zip
Изменить: Вместо того, чтобы копировать/ вставьте все, что я заархивировал в проект Android Studio. Удалена куча других (более сложных) действий и тому подобное, но я почти уверен, что это все равно будет работать.
Вот действие, CowSaved.kt:
Код: Выделить всё
package com.slasheethecow.moosavedstate
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
class CowSaved : AppCompatActivity() {
val cowModel: CowSavedModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cow_saved)
setStuffUp()
}
private fun setStuffUp() {
findViewById(R.id.cowSaved_submitButton).setOnClickListener {
cowModel.cowSetName(findViewById(R.id.cowName_editText).text.toString())
}
cowModel.cowName.observe(this, {
findViewById(R.id.cowSaved_displayView).text = "${resources.getString(R.string.cow_prefix)} $it" ?: ""
})
}
}
Код: Выделить всё
package com.slasheethecow.moosavedstate
import androidx.lifecycle.LiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
class CowSavedModel(private val myState: SavedStateHandle): ViewModel() {
companion object {
val KEY_NAME = "cow_saved_name_key"
}
val cowName: LiveData = myState.getLiveData(KEY_NAME)
fun cowSetName(newname: String) {
myState.set(KEY_NAME, newname)
}
}
Код: Выделить всё
Код: Выделить всё
Type in me! You know you want to.
Do me first! Actually, nah.
Grats! You\'re a cow named:
Код: Выделить всё
Подробнее здесь: [url]https://stackoverflow.com/questions/66366348/just-cant-get-savedstate-on-viewmodel-working-no-matter-what-i-try[/url]
Мобильная версия