Как закрыть активность и вернуться к предыдущей активности в android
у меня есть основная деятельность, что когда я нажимаю на кнопку, начинает новую деятельность, я использовал следующий код, чтобы сделать это:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
приведенный выше код был запущен из основного действия.
Теперь в моей новой деятельности, которая называется основной деятельностью, у меня есть кнопка Назад.
Когда я нажимаю на эту кнопку назад, я хочу, чтобы моя новая деятельность закрылась, и она должна вернуться к исходной основной деятельности.
Я пробовал звонить super.finish() и просто finish() (из нового но это затем закрывает все мое приложение (включая мою основную деятельность).
как я могу просто закрыть деятельность, которая в настоящее время находится в фокусе, а затем вернуться к основной деятельности?
редактировать
тот факт, что кнопка "назад" моего телефона также закрывает все мое приложение, заставляет меня думать, что я неправильно запустил вторую активность?
хорошо, я искал,
Я создал действие настройки это использует тот же код манифеста и тот же код для запуска действия.
для работы установки, когда я нажимаю кнопку назад, он возвращается к основной деятельности.
С деятельностью, упомянутой выше в главном вопросе, он просто выходит из всего моего приложения.
таким образом, проблема, похоже, не в коде для завершения действия, а в самой активности.
16 ответов:
Я думаю, что ты называешь
finish()методMainActivityперед началомSettingsActivity.сценарий, который вы описали, будет происходить следующим образом:
или
установлен
android:noHistory = "true"наMainActivityвнутриAndroidManifest.xmlкоторый вызываетMainActivitytofinishавтоматически при нажатии клавиши "Назад".или
перед переключением на "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 (), как описано выше с уже установленными результатами.
Если вы используете фрагмент u должен использовать
getActivity().onBackPressed();Если вы используете одно действие вы можете использовать
finish();
Вы делаете это слишком сложно. Если я понимаю, что вы пытаетесь сделать правильно, встроенная кнопка "назад" и сам 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(); } });
Я считаю, что ваша вторая деятельность, вероятно, не связана с вашей основной деятельностью в качестве детской деятельности. Проверьте ваш
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); }попробуйте это он работает как на кнопка возврата панели инструментов как аппаратная кнопка Назад.
возможно, вы вызываете 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