마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

액티비티의 변수를 유지할수 있는 방법은 없을까요?

0 추천
버튼을 클릭하면 액티비티가 열리면서 원하는 메소드가 동작하게 되어있는데요

메소드가 동작이 멈춘다음 다음것으로 새로 시작하고싶은데

간단하게 int형 인덱스만 바꿔서 현재 액티비티를 재실행 하면 편하겠더군요

 

테스트삼아 인덱스를 ++하여 주고

finish();
startActivity(getIntent());

로 액티비티를 재실행 해봤는데요  역시나 인덱스값도 초기화 되버려서

한번 끝났던 것을 재실행 하네요

 

액티비티를 재실행 하는데 변수를 유지할수 있는 방법이 없을까요?
하루™ (250 포인트) 님이 2013년 5월 11일 질문

1개의 답변

+1 추천
 
채택된 답변

안드로이드 생명주기에 의하면, finish()를 호출하면 현재 액티비티의 데이터를 모조리 없애버리는 걸로 알고 있습니다. 그러므로, 인덱스 변수가 액티비티 안에 선언되어 있을 경우, 같이 사라지겠지요 ㄷㄷㄷㄷ

 

액티비티를 여는 intent에 같이 인덱스 변수를 putExtra로 넣어 startActivityForResult 메소드로 액티비티를 쏴보세요.

그 후에, 새 액티비티에서 인덱스를 getExtra로 꺼내보는 건 어떨까요?

인덱스를 ++해서 값을 상승시킨 후, setResult로 다시 인덱스 변수를 전 액티비티로 보내면 액티비티 재실행하고도 인덱스를 유지할 수 있을 것입니다.

 

Intent intent = new (currentActivity.this, nextActivity.class);
Bundle extras = intent.getExtras();

extras.putExtra("INDEX", (int)index);
startActivityForResult(intent, 1);

//새 액티비티로 넘어갈 Intent와 호출한 액티비티로부터 데이터를 받을 수 있는 startActivityForResult입니다.

//새 액티비티에서는

//Intent를 받고
Intent intent = getIntent();

//Index를 추출해다가 값을 상승시킵니다.
int index = intent.getInt("INDEX");
index++;

//다시 인덱스 변수를 전 액티비티로 내보낼 Intent
Intent returnIntent = new Intent();

//Intent에 putExtras로 다시 인덱스 변수를 넣습니다.
returnIntent.putExtras("newIndex", (int)index);

//전 액티비티에 있던 startActivityForResult의 결과물 이벤트를 설정하구요.
setResult(RESULT_OK, returnIntent);

//현 액티비티를 파괴합니다.
finish();

 

다시 전 액티비티로 돌아왔다면,

//안드로이드 startActivityForResult의 결과물을 받을 수 있는 onActivityResult 메소드입니다.

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{

  if (requestCode == 1) 
  {
     if(resultCode == RESULT_OK)
     {      
         int index = data.getInt("newIndex");          
     }
  }
}

다시 새 액티비티에서 setResult에 RESULT_OK 플래그를 넣으신걸 기억하시죠?

전 액티비티로 돌아왔을때, onActivityResult 메소드에서 resultCode가 RESULT_OK 플래그와 일치하다면, 갱신된 인덱스를 손에 얻으실 수 있습니다.

두부고기 (3,820 포인트) 님이 2013년 5월 11일 답변
하루™님이 2013년 5월 14일 채택됨
상세한 답변 감사드립니다
...