【发布时间】:2018-12-08 09:20:11
【问题描述】:
我有一个活动说 ActivityMain 从这个活动我移动到另一个名为 ActivitySettings 的活动并在设置活动中我通过单击一个按钮来更改应用程序区域设置,并使用重新创建我实现了我需要的更改当前活动,但当我按回时,我的“ActivityMain”将恢复,但区域设置未更新。
有人可以告诉我如何“重新创建”后台活动吗?什么是正确的方法。
我不能在刷新时调用重新创建,因为它将是无限循环
【问题讨论】:
我有一个活动说 ActivityMain 从这个活动我移动到另一个名为 ActivitySettings 的活动并在设置活动中我通过单击一个按钮来更改应用程序区域设置,并使用重新创建我实现了我需要的更改当前活动,但当我按回时,我的“ActivityMain”将恢复,但区域设置未更新。
有人可以告诉我如何“重新创建”后台活动吗?什么是正确的方法。
我不能在刷新时调用重新创建,因为它将是无限循环
【问题讨论】:
在每个Activity的onCreate()你可以维护currentLangCode。检查onResume()中的这个值,如果不同,你可以断定语言环境发生了变化,recreate()
你可以这样做:
public class ActivityA extends AppCompatActivity{
private String currentLangCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
currentLangCode = getResources().getConfiguration().locale.getLanguage();
...
}
@Override
public void onResume(){
...
if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage())){
currentLangCode = getResources().getConfiguration().locale.getLanguage();
recreate();
}
}
...
}
如果您想将其应用于所有活动,则只需按如下方式创建 BaseActivity:
public class BaseActivity extends AppCompatActivity{
private String currentLangCode;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
currentLangCode = getResources().getConfiguration().locale.getLanguage();
...
}
@Override
public void onResume(){
...
if(!currentLangCode.equals(getResources().getConfiguration().locale.getLanguage();)){
currentLangCode = getResources().getConfiguration().locale.getLanguage();
recreate();
}
}
...
}
从BaseActivity扩展所有活动
public class ActivityA extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
public void onResume(){
super.onResume();
}
...
}
【讨论】: