在 运行 时间更改语言环境时刷新(重新创建)返回堆栈中的活动
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();
}
...
}
我有一个 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();
}
...
}