首页 > 解决方案 > 在运行时更改语言环境时刷新(重新创建)后台堆栈中的活动

问题描述

我有一个活动说ActivityMain从这个活动中我移动到另一个名为的活动ActivitySettings,在设置活动中我通过单击一个按钮来更改应用程序区域设置,并使用重新创建我实现了我在当前活动中需要的更改但是当我按下我的` ActivityMain' 将恢复,但区域设置未更新。

有人可以告诉我如何“重新创建”后台活动吗?什么是正确的方法。

我不能在刷新时调用重新创建,因为它将是无限循环

标签: androidonresumerecreate

解决方案


在每个 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();
    }
    ...
}

推荐阅读