【问题标题】:How to save intent key-value data and restore it in Kotlin?如何在 Kotlin 中保存 Intent 键值数据并恢复?
【发布时间】:2021-04-28 07:07:21
【问题描述】:

我是 android studio Kotlin 的新手。

我想制作一个具有多个级别的测验应用程序。当 LevelActivity 中的级别按钮被按下时,键值对使用 intent.putExtra("problem1", 1) 传递给 ProblemActivity,ProblemActivity 使用 intent.hasExtra("problem", 1) 显示问题。如果问题正确,请使用 intent.putExtra("Clear1", 101) 回到 LevelActivity,并且可以通过 intent.hasExtra("Clear1") 单击下一级按钮。

当我关闭应用程序并再次运行它时,我想让以前数据可点击的按钮保持可点击状态。我研究了 SharedPreference,但我不确定如何保存和恢复意图数据,因为大部分内容都是关于 edit_text。如果您能告诉我,我将不胜感激。

谢谢。

LevelActivity.kt

类 LevelActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_level)


    if (intent.hasExtra("Clear1")) {
        easy2.isEnabled = true
        easy2.isClickable = true
        easy2.setTextColor(Color.parseColor("#000000"))
    } else {
        easy2.isEnabled = false
        easy2.isClickable = false
    }

    easy1.setOnClickListener {
        val intent = Intent(this, ProblemActivity::class.java)
        intent.putExtra("problem1", 1)
        startActivityForResult(intent, 1)
        finish()
    }
    easy2.setOnClickListener {
        val intent = Intent(this, ProblemActivity::class.java)
        intent.putExtra("problem2", 2)
        startActivityForResult(intent, 2)
        finish()
    }
}

}

ProblmeActivity.kt

var round = 1

类 ProblemActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_problem)

    if (intent.hasExtra("problem1")) {
        img_problem.setImageResource(R.drawable.slide1)
        tv_problem.text = "Plus"
        tv_problemlevel.text = "1"
        round = 1
    }

    if (intent.hasExtra("problem2")) {
        img_problem.setImageResource(R.drawable.slide2)
        tv_problem.text = "Minus"
        tv_problemlevel.text = "2"
        round = 2
    }

    tv_enter.setOnClickListener {
        checkAnswer()
    }

fun checkAnswer() {

    if (tv_expression.text.toString() == "1" && round == 1) {
        val intent = Intent(this, LevelActivity::class.java)
        intent.putExtra("Clear1", "Clear1")
        startActivityForResult(intent, 101)
        finish()
    }
    if (tv_expression.text.toString() == "2" && round == 2) {
        val intent = Intent(this, LevelActivity::class.java)
        intent.putExtra("Clear2", 102)
        startActivityForResult(intent, 102)
        finish()
    }
    else{
        var wrong_toast = Toast.makeText(this, "Wrong! Try again!", Toast.LENGTH_SHORT)
        wrong_toast.show()
    }
}

}

【问题讨论】:

    标签: android kotlin android-intent sharedpreferences


    【解决方案1】:

    使用 sharedpreferences 并在应用打开时从中获取值。 除非您使用 sqlite,否则我认为没有其他方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多