Как закрыть активность и вернуться к предыдущей деятельности в android

У меня есть основное действие, когда я нажимаю кнопку, запускает новое действие, я использовал следующий код:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

Вышеуказанный код запускался из основного действия.

Теперь в моем новом действии, которое вызывается основным действием, у меня есть кнопка возврата. Когда я нажимаю на эту кнопку, я хочу, чтобы моя новая активность закрылась, и она должна вернуться к исходному основному действию.

Я попытался позвонить super.finish() и просто finish() (из нового действия), но затем закрывает все мое приложение (включая мое основное действие).

Как я могу закрыть активность, которая сейчас находится в фокусе, а затем вернуться к основному действию?

EDITED

Тот факт, что моя кнопка возврата телефона также закрывает все мое приложение, заставляет меня думать, что я неправильно начал вторую операцию?


OK Я смотрел,

Я создал объект "Настройки", который использует тот же код манифеста и тот же код для запуска действия.

Для настроек Действие, когда я нажимаю кнопку "Назад", возвращается в основное действие.

С упомянутым выше действием в основном вопросе он просто покидает мое приложение.

Таким образом, проблема не связана с тем, что код завершает работу, но сама деятельность.

Ответ 1

Я думаю, что вы вызываете метод finish() в MainActivity перед запуском SettingsActivity.

Сценарий, который вы описали, будет выполняться двумя способами:

ЯВНО

Вы установили android:noHistory = "true" для MainActivity внутри AndroidManifest.xml, который автоматически вызывает MainActivity до finish при нажатии клавиши возврата.

ИЛИ

Перед тем, как переключиться на свою "SettingsActivity", вы вызвали finish() в своем MainActivity, который убивает его. Когда вы нажимаете кнопку "Назад", так как в стеке не задано другое действие, оно возвращается на главный экран.

Ответ 2

Вы можете вернуться к предыдущему действию, просто позвонив в конец действия() в своей активности. Обратите внимание, что любой код после вызова finish() будет запущен - вы можете просто сделать возврат после вызова finish(), чтобы исправить это.

Если вы хотите вернуть результаты активности 1, а затем при запуске 2-й операции вам нужно:

startActivityForResults(myIntent, MY_REQUEST_CODE);

Внутри вызываемой активности вы можете получить Intent из параметра onCreate() или использовать

getIntent();

Чтобы вернуть результат в действие один, а затем в действие два сделать

setResult(Activity.RESULT_OK, MyIntentToReturn);

Если у вас нет намерения вернуться, просто скажите

setResult(Activity.RESULT_OK);

Если активность имеет плохие результаты, вы можете использовать Activity.RESULT_CANCELED (это используется по умолчанию). Затем в действии, которое вы делаете

onActivityResult(int requestCode, int resultCode, Intent data) {
    // Handle the logic for the requestCode, resultCode and data returned...
}

Для завершения операции два используют те же методы с финишем(), как описано выше, и ваши результаты уже установлены.

Ответ 3

При нажатии на кнопку вы можете позвонить:

super.onBackPressed();

Ответ 4

Если вы используете фрагмент, вы должны использовать

getActivity().onBackPressed();

Если вы используете одну активность, вы можете использовать

finish();

Ответ 5

Это закрывает все приложение:

this.finish();

Ответ 6

попробуйте этот код вместо finish:

onBackPressed();

Ответ 7

Button edit = (Button) view.findViewById(R.id.yourButton);
edit.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View view) {
        Intent intent = new Intent(this, YourMainActivity.class);
        startActivity(intent);
        finish();
    }
});

Ответ 8

Вы делаете это слишком сложно. Если я понимаю, что вы пытаетесь сделать правильно, встроенная кнопка "назад" и сам Android будут выполнять всю работу за вас: http://developer.android.com/guide/components/tasks-and-back-stack.html

Кроме того, реализация пользовательской кнопки "назад" нарушает основные правила качества приложений UX-N1: http://developer.android.com/distribute/googleplay/quality/core.html

Ответ 9

Я полагаю, что ваше второе действие, вероятно, не связано с вашим основным видом деятельности как с дочерней деятельностью. Проверьте файл AndroidManifest.xml и посмотрите, содержит ли элемент <activity> для вашего дочернего действия атрибут android:parentActivityName. Он должен выглядеть примерно так:

<?xml ...?>
...
<activity
    android:name=".MainActivity"
    ...>
</activity>
<activity
    android:name=".ChildActivity"
    android:parentActivityName=".MainActivity"
    ...>
</activity>
...

Ответ 10

Просто не назовите finish() на MainActivity, тогда это исключает необходимость переопределять onBackPressed() в SecondActivity, если вы не выполняете другие функции в этой функции. Если вы чувствуете "необходимость" для этой кнопки возврата, вы можете просто вызвать finish() на SecondActivity, и это приведет вас к вашему MainActivity, если вы не назовете finish() на нем

Ответ 11

Я не знаю, действительно ли это полезно или нет, но я боролся с одной и той же проблемой, и я нашел довольно простой способ, используя только глобальную логическую переменную и действие onResume(). В моем случае моя активность C, если щелкнуть по определенной кнопке, должна вызвать финиш() Activity B!

Activity_A → Activity_B → Activity_C

Activity_A (обычно открывается как Activity_B)

Activity_B (при нажатии какой-либо кнопки на Activity_C):

// Global:
boolean its_detail = false;
// -------
SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
boolean v = prefs.getBoolean("select_client", false);

its_detail = v;

startActivity(C);

@Override
public void onResume(){
     super.onResume();
     if(its_detail == true){
        finish();
     }
}

Итак, всякий раз, когда я нажимаю кнопку в Activity C, она выполняет функцию onResume() "Activity B" и возвращается к Activity A.

Ответ 12

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        if ( id == android.R.id.home ) {
            finish();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

Попробуйте, он работает как на кнопке панели инструментов , так и на аппаратной кнопке.

Ответ 13

Мы столкнулись с очень похожей ситуацией.

Занятие 1 (Открытие) → Занятие 2 (Предварительный просмотр) → Занятие 3 (Подробно)

Неправильный ответ "на спине"

  • Повторное нажатие устройства на Занятии 3 также закроет Занятие 2.

Я проверил все ответы, опубликованные выше, и ни один из них не сработал. Синтаксис Java для перехода между Упражнением 2 и Упражнением 3 был исправлен.

Свежий от кодирования при вызове стороннего приложения. по деятельности. Мы решили исследовать угол конфигурации, что позволило нам определить причину проблемы.

Область действия: настройка действия 2 (вызывающий абонент).

Основная причина:

android:launchMode="singleInstance"

Решение:

android:launchMode="singleTask"

Очевидно, в этой проблеме "при нажатии на спину" singleInstance рассматривает вызванные действия в одном экземпляре с вызывающим действием, в то время как singleTask позволит вызываемым действиям иметь свою собственную идентичность, достаточную для того, чтобы предназначенное при обратном нажатии функционировало должным образом.

Ответ 14

{ getApplicationContext.finish();   }

Попробуйте этот метод.

Ответ 15

возможно, вы вызываете finish(); в событии кнопки клика, поэтому основное действие закрывается сразу после нажатия кнопки, и когда вы возвращаетесь из следующего действия, приложение выходит из него, потому что основная активность уже закрыта и активной активности нет.

Ответ 16

Finish закрывает все приложение, это то, что я ненавижу в разработке Android, не заканчивается, но это нормально, но они не поддерживают синтаксис ok.

startActivity(intent)

Почему бы не

closeActivity (намерения)

Ответ 17

На методе onCreate вашей деятельности напишите следующий код.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

Затем переопределите onOptionsItem выбранный метод вашей деятельности следующим образом

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

И тебе хорошо идти.