繁体   English   中英

Android 主题更改时数据丢失(亮/暗模式)

[英]Android data lost on theme change (Light/Dark mode)

Android :我使用Kotlin制作了一个简单的Todo列表应用程序。 并且这个应用程序的主题(Light/Dark)设置为系统默认主题MODE_NIGHT_FOLLOW_SYSTEM 现在的问题是,当我将主题更改为Dark模式时(因为我的模拟器的主题之前设置为Light主题),所有添加的 Todo 项目都消失了,当我再次更改为Light模式时相同。 然后我注意到我的ArrayList的大小变成了0 (空)。

以下是屏幕截图,可以更好地理解它:

灯光模式

https://i.stack.imgur.com/eWbzO.png

将系统主题更改为深色后

深色模式

https://i.stack.imgur.com/B9iqg.png

任务添加到list: ArrayList当保存按钮saveButton: Textview被点击

class MainActivity : AppCompatActivity() {
    var modified = false
    private lateinit var listView: ListView
    private lateinit var input: EditText
    private lateinit var saveButton: TextView
    private lateinit var cancelButton: TextView

    private val list = ArrayList<String>()
    private lateinit var listAdapter: CustomAdapter
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        listView = findViewById(R.id.listView)
        input = findViewById(R.id.input)
        saveButton = findViewById(R.id.saveBtn)
        cancelButton = findViewById(R.id.cancelBtn)

        listAdapter = CustomAdapter(this, list)
        listView.adapter = listAdapter

        val warningToast = Toast.makeText(this,
            "The text may be empty or contains only spaces",
            Toast.LENGTH_LONG)

        saveButton.setOnClickListener {
            val text = input.text.toString()
            // if text is empty or only contains blank
            if (text.isEmpty() || text.isBlank()) {
                warningToast.show()
                return@setOnClickListener
            }
            if (!modified) {
                // output list size 0 after changing theme 
                Log.d("MY_DEBUG", "size fo list is : ${list.size}")
                list.add(input.text.toString())
            } else {
                // ...
            }
            input.text.clear()
            listAdapter.notifyDataSetChanged()
        }
       
        // ...

    }
}

我认为这是因为它在主题模式更改时触发了uiMode配置更改。 因此,活动会自动重新创建。 即使在更改主题后我也想保留添加的项目。 有什么方法可以防止丢失添加的项目。 谢谢!

更改主题会重新创建您的活动并重新启动您的list 这不是因为改变主题本身。

您必须使用自己的序列化方法(如 JSON)将数据持久保存在数据库或 SharedPreferences 实例中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM