Android: вернуться к предыдущей деятельности

Я хочу сделать что-то простое на android app. Как можно вернуться к предыдущему занятию?

какой код мне нужно, чтобы вернуться к предыдущей операции

22 ответов


действия Android хранятся в стеке действий. Возвращение к предыдущему занятию может означать две вещи.

  1. вы открыли новое действие из другого действия с помощью startActivityForResult. В этом случае вы можете просто позвонить finishActivity() функция из вашего кода, и она вернет вас к предыдущей деятельности.

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


просто напишите на click 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();

Если вы правильно настроили 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();
onBackPressed();

все новые действия / намерения по умолчанию имеют назад / предыдущее поведение, если вы не закодировали finish() о вызывающем действии.


Я предлагаю NavUtils.navigateUpFromSameTask (), это легко и очень просто, вы можете узнать его от разработчика google.Хотел бы я вам помочь!


помимо всех упомянутых ответов, их все еще альтернативный способ сделать это, скажем, у вас есть два класса, класс A и класс B.

класс A вы сделали некоторые действия, такие как checkbox select, распечатали некоторые данные и намерение класса B. Класс B, вы хотели бы передать несколько значений классу A и сохранить предыдущее состояние класса A, вы можете использовать, попробовать этот альтернативный метод или загрузить исходный код для демонстрации это

http://whats-online.info/science-and-tutorials/125/Android-maintain-the-previous-state-of-activity-on-intent/

или

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.