где объект должен храниться в mvvm

#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 я на самом деле не тестирую это, я отредактировал ответ