onsaveinstancestate不处理状态

发布于 2025-02-13 11:06:49 字数 1465 浏览 1 评论 0原文

我正在尝试在屏幕翻转后单击“ getName”按钮时获得我的deDittext1.text,但它不起作用。 它应该如何工作

  1. 将一些文本添加到ET1
  2. 单击setName,然后tv1出现 (tv1.text = et1.text,var“ name” = tv1.text)
  3. 翻转屏幕
  4. 单击getName(在ET1处,我们必须将其放在 在以前保存InstanceState)

我是一个菜鸟,希望您能帮助我!提前致谢。 < 3

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"
    }

I'm trying to get my edittext1.text while clicking on the getName button after screen flipped but it doesn't work.
How it should work

  1. adding some text to the et1
  2. click setName then tv1 appears
    (tv1.text = et1.text, var "name" = tv1.text)
  3. flip the screen
  4. click getName (at the et1 have to be value "name" that we put to the
    SaveInstanceState before)

I'm a noobie, hope You can help me! Thanks in advance. <3

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"
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱娆 2025-02-20 11:06:49

您需要使用OnSaveInstancestate函数的另一个超载函数:一个只有一个参数:fun onSaveInstanceState(OnsaveInstate:oftstate:bundle)

您的代码应以下内容:

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

You need to use another overload of the onSaveInstanceState function: the one with with just one parameter: fun onSaveInstanceState(outState: Bundle)

Your code should look the following:

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString(KEY_NAME, name)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文