Я хочу сделать что-то простое в приложении для Android. Как можно вернуться к предыдущему действию.
Какой код мне нужен, чтобы вернуться к предыдущему действию.
Я хочу сделать что-то простое в приложении для Android. Как можно вернуться к предыдущему действию.
Какой код мне нужен, чтобы вернуться к предыдущему действию.
Действия Android хранятся в стеке действий. Возвращение к предыдущему действию может означать две вещи.
Вы открыли новую активность из другого действия с помощью startActivityForResult. В этом случае вы можете просто вызвать функцию finishActivity() из вашего кода, и она вернет вас к предыдущему действию.
Следите за стеком действий. Всякий раз, когда вы начинаете новую деятельность с намерением, вы можете указать флаг намерения, например 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()
. Это более или менее то, что по умолчанию делает кнопка "Назад".
Просто напишите на клике finish(). Он перенесет вас в предыдущее действие.
Только это
super.onBackPressed();
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();
если вы хотите перейти только к использованию предыдущей активности
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);
Если вы правильно настроили файл AndroidManifest.xml с родительской активностью, вы можете использовать:
NavUtils.navigateUpFromSameTask(this);
Если это ваша дочерняя деятельность.
Добавьте это в свой метод onCLick(), он вернется к предыдущему действию
отделка();
или вы можете использовать это. Он отлично работал у меня.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Вы можете явно вызвать onBackPressed
, это самый простой способ
Подробнее см. вернуться к предыдущему действию
Запустите второе действие с использованием намерения (используйте либо startActivity
или startActivityForResult
в соответствии с вашими требованиями). Теперь, когда пользователь нажимает кнопку "Назад", текущая активность сверху будет закрыта, а предыдущая будет показана.
Теперь скажем, что у вас есть два действия: один для выбора некоторых параметров для пользователя, например, язык, страна и т.д., и после его выбора пользователь нажимает кнопку "Далее", чтобы перейти к форме входа (например). Теперь, если логин не увенчался успехом, тогда пользователь будет находиться в активности входа в систему, что, если логин будет успешным?
Если вход успешно завершен, вам нужно начать другое действие. Это означает, что будет запущено третье действие, и все еще есть два действия. В этом случае будет полезно использовать startActivityForResult
. Когда логин будет успешным, отправьте данные OK в первую активность и закройте активность входа. Теперь, когда данные получены, затем запустите третье действие и закройте первое действие, используя финиш.
Получил ту же проблему и
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);
}
Попробуйте это, так как вам нужно нажать кнопку
finish();
onBackPressed();
Все новые действия/намерения по умолчанию имеют обратное/предыдущее поведение, если только вы не закодировали finish()
в вызывающей активности.
@Override
public void onBackPressed() {
super.onBackPressed();
}
и если вы хотите, чтобы на кнопке щелкнуть назад, просто поставьте
bbsubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if ( id == android.R.id.home ) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
Попробуйте, он работает как на кнопке панели инструментов , так и на аппаратной кнопке.
Я предлагаю NavUtils.navigateUpFromSameTask(), это легко и просто, вы можете изучить его с помощью разработчика google.Wish я мог бы вам помочь!
Есть несколько случаев, чтобы вернуться к предыдущей активности:
Случай 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.
Помимо всех упомянутых ответов, это еще один альтернативный способ сделать это, скажем, у вас есть два класса, класс A и класс B.
Класс A вы сделали некоторые действия, такие как выбор флажка, распечатали некоторые данные и намерены использовать класс B. Класс B, вы хотели бы передать несколько значений классу A и сохранить предыдущее состояние класса A, вы можете использовать, попробовать этот альтернативный метод или загрузить исходный код, чтобы продемонстрировать это.
или
http://developer.android.com/reference/android/content/Intent.html
Просто попробуйте это, первая деятельность
Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);
В вашем втором действии
@Override
public void onBackPressed() {
this.finish();
}
После этого у вас есть два способа вернуться от текущей активности к предыдущей:
Просто позвоните: finish()
под слушателем нажатия кнопки,
Или же
Переопределите следующий метод, чтобы вернуться назад с помощью кнопки возврата системы:
@Override
public void onBackPressed() {
super.onBackPressed();
}