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



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



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


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



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



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



как я могу просто закрыть деятельность, которая в настоящее время находится в фокусе, а затем вернуться к основной деятельности?



редактировать



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





хорошо, я искал,



Я создал действие настройки это использует тот же код манифеста и тот же код для запуска действия.



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



С деятельностью, упомянутой выше в главном вопросе, он просто выходит из всего моего приложения.



таким образом, проблема, похоже, не в коде для завершения действия, а в самой активности.

2066   16  

16 ответов:

Я думаю, что ты называешь finish() метод MainActivity перед началом SettingsActivity.

сценарий, который вы описали, будет происходить следующим образом:

или

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

или

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

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

если вы хотите вернуть результаты в действие один, то при запуске действия два вам нужно:

startActivityForResults(myIntent, MY_REQUEST_CODE);

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

getIntent();

чтобы установить возврат результата в упражнение один затем в упражнении два сделать

setResult(Activity.RESULT_OK, MyIntentToReturn);

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

setResult(Activity.RESULT_OK);

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

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

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

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

super.onBackPressed();

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

getActivity().onBackPressed();

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

finish();

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

onBackPressed();

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

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

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();
    }
});

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

this.finish();

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

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

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

Я не знаю, является ли это даже полезным или нет, но я боролся с той же проблемой, и я нашел довольно простой способ, только с глобальной булевой переменной и действием onResume (). В моем случае, моя активность C если нажать на определенную кнопку, она должна вызвать finish () 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.

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

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

        return super.onOptionsItemSelected(item);
    }

попробуйте это он работает как на кнопка возврата панели инструментов как аппаратная кнопка Назад.

{ getApplicationContext.finish();   }

попробовать этот метод..

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

Finish закрывает все приложение, это то, что я ненавижу в разработке Android не закончить, что хорошо, но что они не успевают остроумие ОК синтаксис у них есть

startActivity(intent)

почему бы и нет

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

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

Действие 1 (Открытие) - > Действие 2 (Предварительный Просмотр) - > Действие 3 (Подробно)

неверный ответ "on back press"

  • устройство назад нажмите на действие 3 также закроет действие 2.

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

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

Scope: настройка Activity 2 (абонента).

Причины:

android:launchMode="singleInstance"

решение:

android:launchMode="singleTask"

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

Comments

    Ничего не найдено.