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.