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

时间:2018-06-29 08:21:39

标签: android onresume recreate

我有一个活动说ActivityMain,从这个活动移到另一个名为ActivitySettings的活动,并且在设置活动中,我通过单击一个按钮来更改App语言环境,并使用recreate来实现我需要在当前活动中进行更改,但是当我按回去时,我的“ ActivityMain”将恢复,但语言环境未更新。

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

我无法在刷新时调用recreate,因为它将是无限循环

1 个答案:

答案 0 :(得分:2)

在每个活动的public function boot() { $this->registerPolicies(); Passport::routes(); Passport::tokensExpireIn(now()->addDays(15)); Passport::refreshTokensExpireIn(now()->addDays(30)); } 中,您可以维护onCreate()。在currentLangCode中检查此值,如果不同,则可以推断出语言环境已更改并且onResume()

您可以执行以下操作:

recreate()

我的推荐

如果您要将其应用于所有活动,则只需按如下所示创建BaseActivity:

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

扩展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