![](/img/trans.png)
[英]How to maintain the same theme in Android java app ? in both dark and light mode of android mobile
[英]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.