onBackPressed() 无法使 MainActivity 重新加载
onBackPressed() can't make MainActivity to reload
在我的 SettingsActivity 中执行某些操作后,我正在尝试重新加载我的 MainActivity。 SettingsActivity 中的“我的向上”按钮效果很好,并在从 SettingsActivity 返回时重新加载 MainActivity。但是当在 SettingsActivity 中按下时,后退按钮会保存数据但不会重新加载 MainActivity。基本上我的 getSupportLoaderManager().restartLoader() 不适用于 onBackPressed() 你知道吗,我该如何解决它?
我的 MainActivity 是这样的:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, SETTINGS_REQUEST_CODE);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == SETTINGS_REQUEST_CODE && resultCode == RESULT_OK){
getSupportLoaderManager().restartLoader(0, null, this);
}
}
我的 SettingsActivity 类似于:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){ //WORKS GREAT
finishSetting();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() { //SAVES DATA BUT DOESN'T RELOAD MAINACTIVITY
finishSetting();
//startActivity(new Intent(this, MainActivity.class));
}
private void finishSetting(){
if(newLanguageSelection==null || newLanguageSelection.equals(getLanguagePreference())){
setResult(RESULT_CANCELED);
}
else {
setLanguagePreference(newLanguageSelection);
setResult(RESULT_OK);
}
finish();
}
编辑:
当您启动第二个 activity 时,您的 Main 暂停,当按下后退按钮时,它会恢复...
在您的 SettingsActivity
上设置一个标志(例如使用 SharedPreferences)
SettingsActivity.onBackPressed(){
finishSetting();
SharedPreferences prefs= getSharedPreferences("prefs", MODE_PRIVATE);
prefs.edit().puBoolean("isShouldReload", true).apply();
}
然后,在 MainActivity.onResume
onResume(){
SharedPreferences prefs= getSharedPreferences("prefs", MODE_PRIVATE);
if(prefs.getBoolean("isShouldReload", false)){
// Do your reload.
}
}
你应该覆盖你的 onResume()
来检查主 activity 是否被刷新,所以每当你从设置 activity 回到主 activity .. 它会得到更新..
在public void onBackPressed()
方法中只写:
getActionBar().setDisplayHomeAsUpEnabled(true);
在我的 SettingsActivity 中执行某些操作后,我正在尝试重新加载我的 MainActivity。 SettingsActivity 中的“我的向上”按钮效果很好,并在从 SettingsActivity 返回时重新加载 MainActivity。但是当在 SettingsActivity 中按下时,后退按钮会保存数据但不会重新加载 MainActivity。基本上我的 getSupportLoaderManager().restartLoader() 不适用于 onBackPressed() 你知道吗,我该如何解决它?
我的 MainActivity 是这样的:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, SETTINGS_REQUEST_CODE);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == SETTINGS_REQUEST_CODE && resultCode == RESULT_OK){
getSupportLoaderManager().restartLoader(0, null, this);
}
}
我的 SettingsActivity 类似于:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){ //WORKS GREAT
finishSetting();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() { //SAVES DATA BUT DOESN'T RELOAD MAINACTIVITY
finishSetting();
//startActivity(new Intent(this, MainActivity.class));
}
private void finishSetting(){
if(newLanguageSelection==null || newLanguageSelection.equals(getLanguagePreference())){
setResult(RESULT_CANCELED);
}
else {
setLanguagePreference(newLanguageSelection);
setResult(RESULT_OK);
}
finish();
}
编辑:
当您启动第二个 activity 时,您的 Main 暂停,当按下后退按钮时,它会恢复...
在您的 SettingsActivity
上设置一个标志(例如使用 SharedPreferences)
SettingsActivity.onBackPressed(){
finishSetting();
SharedPreferences prefs= getSharedPreferences("prefs", MODE_PRIVATE);
prefs.edit().puBoolean("isShouldReload", true).apply();
}
然后,在 MainActivity.onResume
onResume(){
SharedPreferences prefs= getSharedPreferences("prefs", MODE_PRIVATE);
if(prefs.getBoolean("isShouldReload", false)){
// Do your reload.
}
}
你应该覆盖你的 onResume()
来检查主 activity 是否被刷新,所以每当你从设置 activity 回到主 activity .. 它会得到更新..
在public void onBackPressed()
方法中只写:
getActionBar().setDisplayHomeAsUpEnabled(true);