我有一个活动说ActivityMain
,从这个活动移到另一个名为ActivitySettings
的活动,并且在设置活动中,我通过单击一个按钮来更改App语言环境,并使用recreate来实现我需要在当前活动中进行更改,但是当我按回去时,我的“ ActivityMain”将恢复,但语言环境未更新。
有人可以告诉我如何“重新创建”堆栈活动吗?什么是正确的方法。
我无法在刷新时调用recreate,因为它将是无限循环
答案 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