【发布时间】:2023-12-21 03:39:01
【问题描述】:
我为我的应用创建了一个新 Activity,并实现了一个 BroadcastReceiver 来处理设备语言更改,当用户将应用置于后台并更改语言时,应该重新创建该 Activity。我在我的活动中的 onCreate 中调用此方法,并在调用 languageReceiver() 之前检查 savedInstanceState 是否为 null,但是当我更改语言时,savedInstanceState 不为 null 并且不调用该方法...
setupLangReceiver() 方法
private fun setupLangReceiver(): BroadcastReceiver? {
if (mLangReceiver == null) {
mLangReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
recreateActivity(intent)
}
}
registerReceiver(mLangReceiver, IntentFilter(Intent.ACTION_LOCALE_CHANGED))
}
return mLangReceiver
}
recreateActivity() 方法
private fun recreateActivity(intent: Intent) {
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
finish()
overridePendingTransition(0, 0)
startActivity(intent)
overridePendingTransition(0, 0)
}
SetupLangReceiver 方法调用
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_prb_module)
ThemeUtils.onActivityCreateSetTheme(this)
if (savedInstanceState == null) {
setupLangReceiver()
}
【问题讨论】:
标签: android kotlin android-activity broadcastreceiver android-savedstate