这里有一些问题。
-
您应该在中设置内容视图
onCreate()
不是
onStart()
.
OnStand()
可以为同一个调用多次
Activity
实例。例如,如果启动
活动
,按Home键,然后继续你的应用程序,你将完成
onPause()
,请
onStop()
然后
OnStand()
,请
onResume()
. 只有当
活动
创建。
-
显示的逻辑
Fragment
只有在
活动
正在被
再创造
. 我想你的意思可能是相反的。你可以简单地把它改成
if (!activityRecreated)
但是我建议通过将视图初始化完全移动到
OnCuto()
就像这样,只检查主题状态是否在
OnStand()
:
class MyActivity : AppCompatActivity() {
private val useDarkTheme: Boolean = false
private var twoPane: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
useDarkTheme = shouldUseDarkTheme()
setTheme(if (useDarkTheme) R.style.MyDarkTheme else R.style.MyLightTheme)
super.onCreate(savedInstanceState)
setContentView(R.layout.md)
// savedInstanceState will be null only the first time the Activity is created
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.master_container, MyFragment())
.commit()
}
twoPane = findViewById<View>(R.id.detail_container) != null
setSupportActionBar(findViewById(R.id.my_toolbar))
}
override fun onStart() {
super.onStart()
if (useDarkTheme != shouldUseDarkTheme()) {
recreate()
}
}
private fun shouldUseDarkTheme(): Boolean =
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("preference_a", false)
}