Android: вернуться к предыдущей деятельности
Я хочу сделать что-то простое на android app. Как можно вернуться к предыдущему занятию?
какой код мне нужно, чтобы вернуться к предыдущей операции
22 ответов
действия Android хранятся в стеке действий. Возвращение к предыдущему занятию может означать две вещи.
вы открыли новое действие из другого действия с помощью startActivityForResult. В этом случае вы можете просто позвонить finishActivity() функция из вашего кода, и она вернет вас к предыдущей деятельности.
следите за стеком активности. Всякий раз, когда вы начинаете новую деятельность с намерением вы можете указать флаг intent как
FLAG_ACTIVITY_REORDER_TO_FRONT
илиFLAG_ACTIVITY_PREVIOUS_IS_TOP
. Это можно использовать для переключения между действиями в приложении. Но я не часто ими пользовался. Посмотрите на флаги здесь: http://developer.android.com/reference/android/content/Intent.html
как указано в комментариях, если действие открыто с startActivity()
затем можно закрыть его с помощью finish()
.
Если вы хотите использовать кнопку вверх, вы можете поймать это в onOptionsSelected(MenuItem item)
метод с проверкой идентификатора элемента против android.R.id.home
в отличие от R.id.home
как уже упоминалось в комментариях.
попробовать Activity#finish()
. Это более или менее то, что кнопка возврата по умолчанию.
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
это приведет вас к предыдущему действию, сохраняя его стек и очищая все действия после него из стека.
например, если стек был A - >B->C->D и вы начинаете B с этого флага, стек будет A - >B
- вы хотите взять под контроль поведение кнопки "Назад"? Вы можете переопределить кнопку назад (чтобы перейти к определенному действию) с помощью одного из двух методов.
для Android 1.6 и ниже:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
или если вы поддерживаете только Android 2.0 или выше:
@Override
public void onBackPressed() {
// do something on back.
return;
}
для больше деталей: http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html
просто вызовите этот метод, чтобы закончить текущую деятельность или вернуться onBackPressed
finish();
или
onBackPressed();
Если вы правильно настроили AndroidManifest.xml-файл с родительской активностью, вы можете использовать:
NavUtils.navigateUpFromSameTask(this);
где это ваша активность ребенка.
Если вы хотите перейти к просто хотите перейти к предыдущему использованию активности
finish();
или
onBackPressed();
Если вы хотите перейти ко второму действию или ниже, используйте следующее:
intent = new Intent(MyFourthActivity.this , MySecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//Bundle is optional
Bundle bundle = new Bundle();
bundle.putString("MyValue1", val1);
intent.putExtras(bundle);
//end Bundle
startActivity(intent);
добавьте это в свой метод onCLick (), он вернется к вашему предыдущему действию
finish ();
или вы можете использовать это. Это сработало отлично для меня
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
вы можете конкретно назвать onBackPressed
Это самый простой способ
См.вернуться к предыдущей операции дополнительные сведения
запустите второе действие с помощью intent (либо используйте startActivity
или startActivityForResult
согласно вашим требованиям). Теперь, когда пользователь нажимает кнопку Назад, текущая активность сверху будет закрыта, а предыдущая будет показана.
Теперь предположим, что у вас есть два действия, один для выбора некоторых настроек для пользователя, таких как язык, страна и т. д., И после его выбора пользователь нажимает кнопку Далее, чтобы перейти к форме входа (например) . Теперь, если логин неудачный, то пользователь будет на активности входа в систему, что делать, если вход успешен ?
Если вход успешно, то вы должны начать другую деятельность. Это означает, что будет начато третье действие, и все еще есть два выполняемых действия. В этом случае будет хорошо использовать startActivityForResult
. При успешном входе в систему отправьте данные OK обратно в первое действие и закройте действие входа. Теперь, когда данные получены, запустите третье действие и закройте первое действие с помощью finish.
получил ту же проблему и
finish(); OR super.onBackPressed();
работал отлично для меня, оба работали одинаково, но не повезло с return
вы можете попробовать это:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
и если вы хотите на кнопку нажмите вернуться, то просто положить
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
все новые действия / намерения по умолчанию имеют назад / предыдущее поведение, если вы не закодировали finish()
о вызывающем действии.
Я предлагаю NavUtils.navigateUpFromSameTask (), это легко и очень просто, вы можете узнать его от разработчика google.Хотел бы я вам помочь!
помимо всех упомянутых ответов, их все еще альтернативный способ сделать это, скажем, у вас есть два класса, класс A и класс B.
класс A вы сделали некоторые действия, такие как checkbox select, распечатали некоторые данные и намерение класса B. Класс B, вы хотели бы передать несколько значений классу A и сохранить предыдущее состояние класса A, вы можете использовать, попробовать этот альтернативный метод или загрузить исходный код для демонстрации это
или
http://developer.android.com/reference/android/content/Intent.html
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
попробуйте это работает как на кнопка возврата панели инструментов as аппаратная кнопка Назад.
просто попробуйте это в, первое действие
Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);
в вашей второй деятельности
@Override
public void onBackPressed() {
this.finish();
}
есть несколько случаев, чтобы вернуться к предыдущей деятельности:
Пример 1: если вы хотите принять результат предыдущей деятельности, то ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivityForResult(intent,2);
FBHelperActivity.java
Intent returnIntent = new Intent();
setResult(RESULT_OK, returnIntent);
finish();
Пример 2: ActivityA --> FBHelperActivity - - - - >ActivityA
ActivityA.java
Intent intent = new Intent(ActivityA.this, FBHelperActivity.class);
startActivity(intent);
FBHelperActivity.java
after getting of result call finish();
By this way your second activity will finish and because
you did not call finish() in your first activity then
automatic first activity is in back ground, will visible.