MyApp测试是多语言更改。 http://www.androhub.com/android-building-multi-language-supported-app/选择单选按钮后,它会更改当前活动中的语言。但是当我回到之前的活动时,它并没有改变语言。所以,当我点击后退按钮时,我想回忆一下onCreate。或者如何刷新当前活动?
onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
txt = (TextView) findViewById(R.id.txt);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
radioEng = (RadioButton) findViewById(R.id.eng);
radiohi = (RadioButton) findViewById(R.id.hi);
// Initialization
pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
editor = pref.edit();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
String lang = "en"; // Default Language
switch (i) {
case R.id.eng:
lang = "en";
break;
case R.id.hi:
lang = "hi";
break;
default:
break;
}
changeLocale(lang); // Change Locale on selection basis
}
});
loadLocale();
}
changeLocale
private void changeLocale(String lang) {
if (lang.equalsIgnoreCase(""))
return;
Locale myLocale = new Locale(lang); // Set Selected Locale
saveLocale(lang); // Save the selected locale
Locale.setDefault(myLocale); // set new locale as default
Configuration config = new Configuration(); // get Configuration
config.locale = myLocale; // set config locale as selected locale
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); // Update the config
}
saveLocale& loadLocale
private void saveLocale(String lang) {
editor.putString("save", lang);
editor.commit();
if (lang.equals("en")) {
radioEng.setChecked(true);
} else {
radiohi.setChecked(true);
}
}
private void loadLocale() {
String lang = pref.getString("save", "");
if (lang.equals("")) {
radioEng.setChecked(true);
} else {
changeLocale(lang);
}
}
答案 0 :(得分:0)
Intent intent=new Intent(Current_Activity.this,Current_Activity.class);
startActivity(intent);
finish();
在onBackPressed()
答案 1 :(得分:0)
从当前活动返回时给出resultCode,或保存配置,然后检查活动恢复上的配置以进行语言更改
答案 2 :(得分:0)
您可以通过处理背压事件来调用onCreate方法。
@Override
public void onBackPressed() {
onCreate(new Bundle());
}
如果您使用的是API 11,请使用以下代码,如果上述代码不起作用。
Intent intent = getIntent();
finish();
startActivity(intent);
答案 3 :(得分:0)
我认为你应该完成之前的活动并重新创建它,你可以使用LocalBroadcast。
答案 4 :(得分:0)
使用重新创建方法时可以使用
ProviderOptions.Add("CompilerVersion", "v2.0");
它仅在API级别11中添加。如果要包含更多设备,可以检查API级别并实现重新创建方法以及
git pull
你可以通过制作像...这样的if语句来使用它们。
this.recreate()
答案 5 :(得分:0)
由于在从第一个活动到第二个活动创建意图时使用两个活动,因此调用第一个活动onStop()并将活动放回到堆栈。当您按下后退按钮时,第一个活动onCreate()不再被调用但是调用onResume()并恢复活动。
因此,您尝试的逻辑应该在onResume()中完成,以便每次按下后退按钮时都会调用它。有关更多参考,请检查此内容。
https://developer.android.com/guide/components/activities/activity-lifecycle.html