onBackPressed() не может сделать MainActivity для перезагрузки
Я пытаюсь перезагрузить MainActivity после того, как я что-то сделал в настройках. Кнопка My Up в SettingsActivity работает отлично и перезагружает MainActivity при возврате из SettingsActivity. Но кнопка назад сохраняет данные, но не перезагружает MainActivity при нажатии внутри SettingsActivity. В основном мой 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);
}
}
И мои настройки активности примерно такие:
@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();
}
3 ответа
Редактировать:
Когда вы запустили второе действие, ваш 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()
чтобы проверить, обновлено ли основное действие, поэтому, когда вы вернетесь от установки действия к основному действию.. оно будет обновлено..
В общественных местах onBackPressed()
метод просто напишите:
getActionBar().setDisplayHomeAsUpEnabled(true);