Кнопка Android Back не возвращается к предыдущему действию

У меня есть приложение, которое имеет два действия: MainActivity и SettingsActivity. В MainActivity есть меню с одним элементом меню "Настройки". Когда этот пункт меню щелкнут, он запускает параметр SettingsActivity с намерением. После запуска активности я нажимаю кнопку "Назад" в верхнем левом углу, и ничего не происходит. Я предполагал, что с тех пор, как я начал свою деятельность с использованием намерения, стек активности будет управляться автоматически. Я хочу вернуться в MainActivity. Я ошибаюсь в этом предположении?

MainActivity.onMenuItemSelected

public boolean onMenuItemSelected(int featureId, MenuItem item) {
    int itemID = item.getItemId();

    if(itemID == R.id.settings) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
    }

    return true;
}

SettingsActivity

public class SettingsActivity extends PreferenceActivity {

    public static final String TEST = "test";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

Ответ 1

Внутри SettingsActivity вам необходимо переопределить onOptionsItemSelected, чтобы включить кнопку возврата в верхнем левом углу панели действий для возврата. Он сам не знает, что ему нужно делать при нажатии. Внутри корпуса android.R.id.home вы можете просто вызвать finish(). Это завершит вашу текущую деятельность, и вы вернетесь к MainActivity, которая запустила его. Например:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            this.finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

Просто для полноты, чтобы включить кнопку "домой", вы можете добавить следующее в onCreate() из SettingsActivity:

getActionBar().setDisplayHomeAsUpEnabled(true);

В соответствии с документами setDisplayHomeAsUpEnabled()

It is to show the user that selecting home will return one level up rather than to the top level of the app.

Надеюсь, это поможет.

Ответ 2

Просто добавьте эти строки в свой меток OnCreate

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

и переопределите этот метод, чтобы добавить функциональность к кнопке "Назад":

   @Override
public boolean onOptionsItemSelected(MenuItem item)
{
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    } else if(id==android.R.id.home)
    {
     finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

Надеюсь, это поможет вам