gpt4 book ai didi

android - 在运行时更改语言环境时刷新(重新创建)返回堆栈中的 Activity

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:29 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com