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

标签 android onresume recreate

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

相关文章:

具有多个 parentColumn 和 entityColumn 的 Android 房间关系

android - 确定 Android 暂停的原因

android - 恢复应用程序时我失去了对 Android 的 Webview 的控制

ruby-on-rails - 重新创建版本 -carrierwave-fog-aws

android - 获取蓝牙适配器时出现 Lint 错误

android - 在 NativeActivity 中创建 OpenGL 着色器

java - 跨应用程序可用的方法?

android - 每次屏幕打开时都会调用 onDestroy

android - 如何检查 android 是否要重新创建 Activity 或销毁?

android - 无法重新创建丢失的调试 keystore ?