我有一个 Activity 说 ActivityMain
从这个 Activity 我移动到另一个名为 ActivitySettings
的 Activity 并且在设置 Activity 中我通过点击一个按钮来更改应用程序区域设置,并使用 recreate 我在当前 Activity 中实现了我需要的更改,但是当我按下后退时,我的“ActivityMain”将恢复但语言环境未更新。
有人能告诉我如何“重新创建”backstack Activity 吗?什么是正确的方法。
我不能在刷新时调用重新创建,因为它将是无限循环
最佳答案
在每个 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();
}
}
...
}
我的推荐
如果你想把它应用到所有的Activity,那么简单地创建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
的所有 Activity
public class ActivityA extends BaseActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
public void onResume(){
super.onResume();
}
...
}
关于android - 在运行时更改语言环境时刷新(重新创建)返回堆栈中的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097334/