【问题标题】:onSaveInstanceState doesn't handle the stateonSaveInstanceState 不处理状态
【发布时间】:2022-07-05 17:15:53
【问题描述】:

我试图在屏幕翻转后单击 getName 按钮时获取我的 edittext1.text,但它不起作用。 应该如何工作

  1. 向 et1 添加一些文本
  2. 点击 setName 然后 tv1 出现 (tv1.text = et1.text, var "name" = tv1.text)
  3. 翻转屏幕
  4. 单击getName(在et1 必须是我们放入的值“名称” SaveInstanceState 之前)

我是菜鸟,希望你能帮助我!提前致谢。

class MainActivity : AppCompatActivity() {
    private var name: String? = null

    lateinit var binding: ActivityMainBinding

        override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater).also { setContentView(it.root) }

            binding.setButton.setOnClickListener { setName() }
            binding.getButton.setOnClickListener { getName() }


        }


        fun getName(){
            binding.et1.setText(name)
        }

        fun setName(){
            binding.tv1.text = binding.et1.text
            name = binding.tv1.text.toString()
        }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)

            name = savedInstanceState.getString(KEY_NAME, "unknown")
    }

    override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        outState.putString(KEY_NAME, name)
    }

    companion object{
        private val KEY_NAME = "NAME"
    }

【问题讨论】:

  • 翻转意味着横向模式!?
  • 当你旋转屏幕时,Activity 被重新创建(onCreate方法被调用)。做你的工作以获得那里的名字

标签: android kotlin onsaveinstancestate


【解决方案1】:

修改状态后应调用super.onSaveInstanceState

override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
    outState.putString(KEY_NAME, name)
    super.onSaveInstanceState(outState, outPersistentState)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2018-02-16
    • 2016-09-11
    • 2021-10-25
    • 2021-03-15
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多