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);
Другие вопросы по тегам