kotlin使用Viewmodel和LiveData制作一个篮球计分App
时间: 2023-11-27 07:49:55 浏览: 170
好的,下面是一个简单的示例:
首先,我们需要在 `build.gradle` 文件中添加以下依赖项:
```
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
```
然后,我们需要创建一个包含计分逻辑的 `ScoreViewModel` 类,该类将托管我们的数据。该类需要继承自 `ViewModel`。
```kotlin
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class ScoreViewModel : ViewModel() {
val teamAScore = MutableLiveData<Int>()
val teamBScore = MutableLiveData<Int>()
init {
teamAScore.value = 0
teamBScore.value = 0
}
fun addTeamAScore() {
teamAScore.value = teamAScore.value?.plus(1)
}
fun addTeamBScore() {
teamBScore.value = teamBScore.value?.plus(1)
}
}
```
上述代码中,我们创建了一个 `ScoreViewModel` 类,该类包含两个 `MutableLiveData`,即 `teamAScore` 和 `teamBScore`。这两个变量存储着两个球队的得分,并且在我们的应用程序中可以随时更新。
我们还包含了两个方法 `addTeamAScore()` 和 `addTeamBScore()`,分别用于增加对应球队的得分。
接下来,我们需要创建一个 `MainActivity` 类,该类将托管我们的用户界面。
```kotlin
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
private lateinit var scoreViewModel: ScoreViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
scoreViewModel = ViewModelProviders.of(this).get(ScoreViewModel::class.java)
scoreViewModel.teamAScore.observe(this, Observer { score ->
team_a_score.text = score.toString()
})
scoreViewModel.teamBScore.observe(this, Observer { score ->
team_b_score.text = score.toString()
})
team_a_plus.setOnClickListener {
scoreViewModel.addTeamAScore()
}
team_b_plus.setOnClickListener {
scoreViewModel.addTeamBScore()
}
}
}
```
上述代码中,我们创建了一个 `MainActivity` 类,并在其中创建了一个 `ScoreViewModel` 的实例。
我们还使用了 `ViewModelProviders.of()` 方法来获取 `ScoreViewModel` 的实例,并使用 `observe()` 方法来观察 `teamAScore` 和 `teamBScore` 变量。每当这些变量更新时,我们将更新 UI 中对应的文本视图。
最后,我们为两个加分按钮设置了点击侦听器,并使用 `addTeamAScore()` 和 `addTeamBScore()` 方法来增加对应球队的得分。
现在,当您运行应用程序时,您将看到两个球队的得分,并且您可以使用加分按钮来增加它们的分数。同时,这些更改将保存在 `ScoreViewModel` 中,并在配置更改后保持不变。
阅读全文