Android : 이전 활동으로 돌아 가기


524

안드로이드 앱에서 간단한 것을하고 싶습니다. 이전 활동으로 돌아가는 방법은 무엇입니까?

이전 활동으로 돌아가려면 어떤 코드가 필요합니까


5
마지막 오픈 액티비티
— Vuk

53
당신은 간단한 호출 finish (); 건배
— 응 웬민 빈

super.finish (); 당신이 활동의 ​​내부에서 그것을 호출하는 경우!
— happyhardik

5
여기서 한 가지 질문 : 안드로이드가 메모리 부족이나 다른 문제로 인해 이전 활동을 파괴 한 경우 해당 활동이 더 이상 백 스택에 존재하지 않으며 어떻게됩니까?
— Sunny

@Sunny 가비지 수집기가 스택에서 최상위 활동으로 시작한다고 가정합니다. 따라서 이전 활동이 없으면 현재 활동도 없습니다. 그러나 나는 그 행동이 특정 순서없이 스택에서 메모리를 비우는 것보다 더 의미가 있다고 가정합니다. 누군가가 정확히 알고 있다면 내 의견을 수정하십시오.
— Sedat Kilinc

답변:


486

Android 활동은 활동 스택에 저장됩니다. 이전 활동으로 돌아가는 것은 두 가지를 의미 할 수 있습니다.

  1. startActivityForResult를 사용 하여 다른 활동에서 새 활동을 열었습니다 . 이 경우 코드에서 finishActivity () 함수를 호출 하면 이전 액티비티로 돌아갑니다.

  2. 활동 스택을 추적하십시오. 당신이 의도로 새로운 활동을 시작할 때마다이 같은 의도 플래그를 지정할 수 있습니다 FLAG_ACTIVITY_REORDER_TO_FRONT또는 FLAG_ACTIVITY_PREVIOUS_IS_TOP. 이를 사용하여 애플리케이션의 활동을 섞습니다. 많이 사용하지는 않았습니다. http://developer.android.com/reference/android/content/Intent.html 에서 플래그를 살펴보십시오.

주석에서 언급했듯이 활동이 열린 경우으로 startActivity()닫을 수 있습니다 finish(). 위로 버튼을 사용 하려면 주석에 언급 된 것과 달리 onOptionsSelected(MenuItem item)항목 ID를 확인하는 방법으로 해당 버튼을 잡을 수 있습니다 .android.R.id.homeR.id.home


237
또는 startActivity ()를 사용하여 활동을 열면 finish ()로 닫을 수 있습니다 (매개 변수를 전달할 필요 없음)
— neworld

3
finish ()를 사용하는 위치와 방법을 명확히 할 수 있으므로 사용자가 위로 버튼을 누르면 이전 활동으로 이동합니다.
— RicNjesh

4
@RicNjesh 클릭 한 메뉴 항목의 ID가 R.id.home 인 경우 onOptionsItemSelected 메소드에서 finish ()를 호출하십시오. 그것은 현재 활동을 종료하고 startActivity를 ()로 시작 활동에 당신을 다시 소요됩니다
— 앤더스 Ullnæss

의도를 통해 사용자가 여러 가지 활동으로 차례로 이동하도록하고 있습니다. 앱이 스택에서 너무 많은 활동으로 충돌하지 않도록하기 위해 어떤 조치를 취해야합니까? 감사!
— Ruchir Baronia

1
활동 2를 마치기 전에 활동 1이 어느 시점에서 죽지 않을 것이라고 확신합니까?
— user924

225

시도하십시오 Activity#finish(). 이것은 뒤로 버튼이 기본적으로 수행하는 작업입니다.


1
왜 #? 아니면 점입니까?
— Nabin

8
나는 그가 의미하는 것을 믿는다this.finish();
— Jens Bodal

69
이는 활동 클래스의 비 정적 메소드 인 #표시기입니다 finish(). 유효한 Java는 아니지만 메소드 사용 방법을 설명하는 데 도움이됩니다.
— Bryan Herbst

2
@ Tanis.7x 정적 메소드에 대한 표시기가 있습니까?
— Benten

8
@Benten은 다음 .과 같습니다.Activity.someStaticMethod()
— JonnyReeves

81

click finish () 에 쓰십시오 . 이전 활동으로 이동합니다.


1
onBackPressed ()도 잘 작동하지만이 솔루션은 약간의 .. 예를 들어 OCR 스캐너에 필요한 활동을 종료하는 데 더 좋습니다. 감사!
— Gene Bo

이것은 나의 필요를 만족시킵니다. 감사합니다.
— Roon13

68

딱 이것

super.onBackPressed();

2
이 호출은 현재 활동을 완료하므로 마지막으로 본 활동을 표시합니다. 그러나 이전 활동이 없거나 그 동안 소멸되면 애플리케이션이 종료 될 수 있습니다.
— r1k0

22
이것은 hackish입니다. 이것을 직접 호출해서는 안됩니다. 이것은 라이프 사이클 방법 중 하나이며 안드로이드 시스템에서 호출해야합니다.
— Dheeraj Bhaskar

33
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

이렇게하면 스택을 유지하고 스택에서 모든 활동을 지운 이전 활동으로 이동할 수 있습니다.

예를 들어, 스택이 A-> B-> C-> D이고이 플래그로 B를 시작하면 스택은 A-> B가됩니다.


이것이 내 목적에 맞는 것입니다. finish ()가 작동하지 않는 원인을 찾고 싶습니다.
— Relm

20

뒤로 버튼 동작을 제어하고 싶습니까? 두 가지 방법 중 하나를 통해 뒤로 단추를 대체 (특정 활동으로 이동) 할 수 있습니다.

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


19

현재 활동을 마치거나 onBackPressed로 돌아가려면이 메소드를 호출하십시오.

finish();

또는

onBackPressed();

의도를 통해 사용자가 여러 가지 활동으로 차례로 이동하도록하고 있습니다. 앱이 스택에서 너무 많은 활동으로 충돌하지 않도록하기 위해 어떤 조치를 취해야합니까? 감사!
— Ruchir Baronia

13

이전 액티비티 사용으로 이동하려는 경우

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

1
finish ()와 onBackPressed ()가 모두 작동한다는 것을 알았지 만 적어도 내 앱에서는 finish ()가 매우 느리고 onBackPressed ()가 훨씬 빠릅니다. 궁금한.
— scrayne

의도를 통해 사용자가 여러 가지 활동으로 차례로 이동하도록하고 있습니다. 앱이 스택에서 너무 많은 활동으로 충돌하지 않도록하기 위해 어떤 조치를 취해야합니까? 감사!
— Ruchir Baronia

13

이것을 onCLick () 메소드에 추가하면 이전 활동으로 돌아갑니다.

끝();

또는 이것을 사용할 수 있습니다. 그것은 나를 위해 완벽하게 작동했습니다.

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

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

  return super.onOptionsItemSelected(item);
  }

11

활동 상위가있는 AndroidManifest.xml 파일을 올바르게 설정 한 경우 다음을 사용할 수 있습니다.

NavUtils.navigateUpFromSameTask(this);

이것이 귀하의 자녀 활동입니다.




7

같은 문제가 있고

finish();  OR super.onBackPressed();

나를 위해 잘 작동했지만 둘 다 동일하게 작동했지만 운이 없었습니다. return


6

의도를 사용하여 두 번째 활동을 시작하십시오 (사용 startActivity또는startActivityForResult 요구 사항에 따라). 사용자가 뒤로 버튼을 누르면 상단의 현재 활동이 닫히고 이전 활동이 표시됩니다.

이제 언어, 국가 등 사용자에 대한 일부 설정을 선택하는 활동과 활동을 선택한 후 다음 버튼을 클릭하여 로그인 양식으로 이동하는 두 가지 활동이 있다고 가정 해 보겠습니다. 이제 로그인에 실패하면 사용자가 로그인 활동에 참여하게됩니다. 로그인이 성공하면 어떻게됩니까?

로그인에 성공하면 다른 활동을 시작해야합니다. 이는 세 번째 활동이 시작되고 여전히 두 가지 활동이 실행 중임을 의미합니다. 이 경우을 사용하는 것이 좋습니다 startActivityForResult. 로그인에 성공하면 OK 데이터를 첫 번째 활동으로 다시 보내고 로그인 활동을 종료하십시오. 이제 데이터가 수신되면 세 번째 활동을 시작하고 finish를 사용하여 첫 번째 활동을 닫으십시오.


의도를 통해 사용자가 여러 가지 활동으로 차례로 이동하도록하고 있습니다. 앱이 스택에서 너무 많은 활동으로 충돌하지 않도록하기 위해 어떤 조치를 취해야합니까? 감사!
— Ruchir Baronia

5

당신은 이것을 시도 할 수 있습니다 :

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {

        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

4

finish()호출 활동을 코딩하지 않은 한 모든 새로운 활동 / 의도에는 기본적으로 이전 / 이전 동작이 있습니다 .


4
@Override
public void onBackPressed() {
    super.onBackPressed();
}

버튼 클릭을 원하면 돌아가고 간단히 넣으십시오.

bbsubmit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

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

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

      return super.onOptionsItemSelected(item);
 }

도구 모음 뒤로 버튼 모두 하드웨어 뒤로 버튼 으로 작동 합니다 .


2

NavUtils.navigateUpFromSameTask ()를 제안합니다. 쉽고 간단하며 Google 개발자로부터 배울 수 있습니다. 도와 드리겠습니다!


1

이전 활동으로 돌아가는 경우는 거의 없습니다.

사례 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.

1

먼저, 이전 활동으로 돌아가려면 명심해야합니다. 그런 다음 Intent를 사용하여 다른 활동으로 갈 때 finish () 메소드를 호출하지 마십시오.

그런 다음 현재 활동에서 이전 활동으로 두 가지 방법으로 돌아갈 수 있습니다.

finish()버튼 클릭 리스너에서 다음을 호출 하거나 시스템 백 버튼을 사용하여 다음 방법을 재정의하십시오.

@Override
public void onBackPressed() {
    super.onBackPressed();
}

0

언급 된 모든 답변 외에도 여전히이 작업을 수행하는 대체 방법입니다. 클래스 A와 클래스 B의 두 클래스가 있다고 가정 해 보겠습니다.

클래스 A 체크 박스 선택, 일부 데이터 인쇄 및 클래스 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


0

첫 번째 활동에서 이것을 시도하십시오

Intent mainIntent = new Intent(Activity1.this, Activity2.class);
this.startActivity(mainIntent);

두 번째 활동에서

@Override
public void onBackPressed() {
    this.finish();
}

충돌 유지, 데이터는 내가 생각하는 지속되지 않는다
— 존 ktejik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.