为什么每当我使用savedInstanceState
时,我的片段都会返回黑屏?我已经在活动中加入了相关的savedInstanceState
代码,但是相关的片段仍然没有出现。
class MyActivity : AppCompatActivity() {
private var mCurrentValue: Boolean = false
private var mTwoPane: Boolean = false
private var activityRecreated: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
mCurrentValue = mSharedPreferences.getBoolean("preference_a", false)
when {
mCurrentValue -> setTheme(R.style.MyDarkTheme)
else -> setTheme(R.style.MyLightTheme)
}
super.onCreate(savedInstanceState)
activityRecreated = savedInstanceState != null
setContentView(R.layout.md)
}
override fun onStart() {
super.onStart()
setContentView(R.layout.md)
mTwoPane = findViewById<View>(R.id.detail_container) != null
val mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val mNewValue = mSharedPreferences.getBoolean("preference_a", false)
when {
mCurrentValue != mNewValue -> recreate()
}
val mToolbar = findViewById<Toolbar>(R.id.my_toolbar)
setSupportActionBar(mToolbar)
if (activityRecreated) {
val newFragment = MyFragment()
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.master_container, newFragment)
transaction.commit()
}
}
}
答案 0 :(得分:1)
这里有一些问题。
您应该在onCreate()
中而不是onStart()
中设置内容视图。可以为同一onStart()
实例多次调用Activity
。例如,如果您启动Activity
,按“主页”按钮,然后继续运行应用程序,则您将依次经过onPause()
,onStop()
,onStart()
,{{ 1}}。您只需在创建onResume()
时初始化视图。
仅当正在{strong>重新创建Activity
时,才显示Fragment
的逻辑。我认为您可能是相反的意思。您可以简单地将其更改为Activity
,但我建议通过像这样将视图初始化完全移到if (!activityRecreated)
中,并仅检查主题状态在onCreate()
中是否已更改来清理此问题:
onStart()