在 运行 时间更改语言环境时刷新(重新创建)返回堆栈中的活动

Refresh(recreate) the activities in back stack when change locale at run time

我有一个 Activity 说 ActivityMain 从这个 activity 我搬到另一个 activity 叫 ActivitySettings 和设置 activity 我'通过单击按钮更改应用程序语言环境,并使用重新创建我在当前 activity 中实现了我需要的更改,但是当我按回我的 `ActivityMain' 将恢复但语言环境未更新。

有人能告诉我如何 'Recreate' backstack 活动吗?正确的方法是什么。

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

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