运行时更改语言环境时,刷新(重新创建)后堆栈中的活动。

9
我有一个Activity称为ActivityMain,从这个活动中我移动到另一个名为ActivitySettings的活动,然后在设置活动中通过点击按钮改变应用程序区域设置,并使用recreate实现我需要在当前活动中进行的更改,但是当我按下返回键时,我的“ActivityMain”将恢复,但区域设置没有更新。
有人能告诉我如何重新创建后退堆栈活动吗?正确的方法是什么?
我不能在刷新时调用recreate,因为那样会导致无限循环。

请看这里 https://developer.android.com/training/basics/intents/result - VolkanSahin45
1个回答

4
在每个Activity的onCreate()方法中,您可以维护currentLangCode变量。在onResume()方法中检查该值是否有改变,如果有改变,就可以判断语言环境已经发生了变化,此时需要调用recreate()方法重新创建Activity。
您可以按照以下方式实现:
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();
    }
    ...
}

当然。请告诉我。 - Sagar
1
getResources().getConfiguration().locale.getLanguage() 这并没有给我改变后的语言,它仍然给我旧的语言,并且条件始终为假。我通过检查共享首选项来解决这个问题,我在那里保存了改变后的语言。 - Praneeth
@Praneeth,我刚测试了这个值,对我来说返回的是正确的值。 - Sagar
@Praneeth,我也一样。 - ghita

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接