【发布时间】:2020-03-14 13:23:43
【问题描述】:
我试图在运行时通过单击选项菜单项更改应用程序主题,但它不起作用,我的应用程序不断崩溃。解决此错误的正确方法是什么? Android Studio 不提供任何建议,更不用说有用的建议了。
java.lang.Boolean 不能转换为 java.lang.Integer
class MainActivity : AppCompatActivity() {
private val prefTheme = "preference_DarkTheme"
override fun onCreate(savedInstanceState: Bundle?) {
useDarkTheme = shouldUseDarkTheme()
setTheme(
if (useDarkTheme) R.style.DarkTheme
else R.style.LightTheme
)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onStart() {
super.onStart()
if (useDarkTheme != shouldUseDarkTheme()) recreate()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_changeTheme -> {
switchTheme()
restartActivity()
Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show()
true
}
else -> { super.onOptionsItemSelected(item) }
}
}
private fun getSavedTheme(): Int {
return PreferenceManager.getDefaultSharedPreferences(this)
.getInt(prefTheme, R.style.LightTheme)
}
private fun switchTheme() {
val newTheme: Int =
if (getSavedTheme() == R.style.LightTheme) R.style.DarkTheme else R.style.LightTheme
PreferenceManager.getDefaultSharedPreferences(this)
.edit()
.putInt(prefTheme, newTheme)
.apply()
}
private fun restartActivity() {
startActivity(
Intent(this, MainActivity::class.java)
)
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
finish()
}
private fun shouldUseDarkTheme(): Boolean =
PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
"preference_DarkTheme",
false
)
}
【问题讨论】:
标签: android kotlin android-theme android-preferences android-optionsmenu