如何在onBackPressed()时回顾onCreate()并转到之前的活动?
MyApp测试是多语言变化。 http://www.androhub.com/android-building-multi-language-supported-app/选择单选按钮后,它会更改当前活动中的语言。但是当我回到以前的活动时,它不会改变语言。所以,当我点击返回按钮时,我想回想一下创建。或者如何刷新当前活动?如何在onBackPressed()时回顾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);
}
}
Intent intent=new Intent(Current_Activity.this,Current_Activity.class);
startActivity(intent);
finish();
实例化一个新的意图,你onBackPressed()
当后按时,它不会转到上一个活动。如何回忆onCreate()并返回?谢谢。 –
检查我编辑的答案。 – Orvenito
java.lang.IllegalStateException:已连接 –
给resultCode为当从当前活动回来,或保存设置,然后检查活动的简历配置语言变化
您可以通过处理调用onCreate方法上背衬回新闻事件。
@Override
public void onBackPressed() {
onCreate(new Bundle());
}
如果您使用的是API 11,那么使用下面的代码,并且如果上面的代码不起作用。
Intent intent = getIntent();
finish();
startActivity(intent);
java.lang.IllegalStateException:已连接 –
让我知道它是否无效。 –
minSdkVersion 15,'Intent intent = getIntent(); finish(); startActivity(intent);'后退时它不会进入上一个活动。重新加载当前活动 –
我认为你应该完成前面的活动并重新创建它,你可以使用LocalBroadcast。
当使用重新创建方法做
this.recreate()
只是在API级别11中添加如果您要添加更多的设备可以检查API级别,并同时实现重新创建方法以及工作
Intent intent = getIntent();
finish();
startActivity(intent);
您可以通过一个if语句喜欢同时使用......
if (android.os.Build.VERSION.SDK_INT >= 11){
//Code for recreate
recreate();
}else{
//Code for Intent
Intent intent = getIntent();
finish();
startActivity(intent);
}
由于您在创建第一个活动到第二个活动的意图时使用了两个活动,因此将调用第一个活动onStop(),并将活动放回栈中。当您按回第一个活动时onCreate()不会再次调用,但onResume( )被调用并且活动恢复。
因此,您正试图在onResume()中完成的逻辑,以便每次按下按钮时都会调用它。有关更多参考,请检查该选项。
https://developer.android.com/guide/components/activities/activity-lifecycle.html
我觉得不记得在后面的按钮按下创建。使用onResume来完成你的逻辑。例如,如果您正在提取文本并将其设置为EditText上的提示,那么在返回返回按钮后,按照您的需要再次设置提示文本。 – Abhishek
之前的活动已经在任务堆栈中(已经在内存中)。一旦在当前活动中更改了语言并按回按钮,它将导航到堆栈中的上一个活动。它不会重新加载之前的活动,它只会使以前的活动可见。所以我认为改变MainActivity中的语言或启动器活动总是更好。 – Yatish