【问题标题】:Refresh(recreate) the activities in back stack when change locale at run time在运行时更改语言环境时刷新(重新创建)后台堆栈中的活动
【发布时间】:2018-12-08 09:20:11
【问题描述】:

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

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

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

【问题讨论】:

标签: android onresume recreate


【解决方案1】:

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

【讨论】:

  • 当然。告诉我。
  • getResources().getConfiguration().locale.getLanguage() 这并没有给出改变的语言它仍然给我旧的语言并且条件总是flase我通过检查shareprefs来解决我在哪里保存更改的语言
  • @Praneeth,刚刚测试了这个值,它为我返回了正确的值。
  • @Praneeth,我也一样
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多