#android #kotlin #mvvm
#Android #kotlin #mvvm
Вопрос:
Я не понимаю, где в модели mvvm должен храниться объект. Например, у меня есть приложение
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
viewModel.userScore.observe(this, Observer { it->
score_view.text = it.toString()
})
score_bt.setOnClickListener {
viewModel.scorePoint()
}
}
}
class MyViewModel: ViewModel() {
val _userScore = MutableLiveData<Int>()
val userScore: LiveData<Int>
get() = _userScore
init {
_userScore.value = 1
}
fun scorePoint(){
_userScore.value = (_userScore.value)?.plus(1)
}
}
class Game {
val score = 0
}
когда пользователь нажимает кнопку, оценка увеличивается. Я хочу сохранить счет в игре класса объектов. Где должен храниться объект и как подключить объект к viewmodel, потому что я думаю, что viewmodel не должен содержать объект. Чтобы было ясно, я не ожидаю, что этот объект будет сохранен, когда пользователь отключит приложение.
Ответ №1:
Объектная игра
class Game {
var score = 0
}
ViewModel
class MyViewModel: ViewModel() {
val game = Game() //init the object
val _userScore = MutableLiveData<Game>()
val userScore: LiveData<Game>
get() = _userScore
init {
_userScore.value = game.apply {
score = 1
}
}
fun scorePoint(){
_userScore.value = game.apply {
score
}
}
}
Комментарии:
1. Когда я реализую ваше предложение, я не обновляю пользовательский интерфейс, редактирую, меняю `score.plus (1)` на `score `, и это работает
2. @czlowiekzgon я на самом деле не тестирую это, я отредактировал ответ