2011. 12. 9. 11:08

안드로이드 액티비티(Android Activity) 돌아올 때 값을 받아오기

안드로이드 Intent로 액비티비를 전환하는 네 번째 경우, 이동할 때 전달한 값이 없더라도 이동한 액티비티에서 생성하거나 처리한 값을 다시 받아오는 방식. 

네 번째 버튼, 이동한 액티비티에서 되돌아올때 값을 받아오는 경우.
IntentTestMainActivity.java  <----  ResultActivity.java

받아오는 값은 200원...
전달할 값은 항상 putExtra("전달명", "넘겨주는 값") ;   // 숫자면 "" 없이 그냥 입력.
넘겨주는 액티비티에서 처리하는 메써드는 setResult(Activity.RESULT_OK, intent);

메인 파일, IntentTestMainActivity.java

package net.br ;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class IntentTestActivity extends Activity {    
    private static final int REQUEST_CODE_1 = 01 ;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
           
    // 값을 받아오는 Result Intent
    public void onClickIntentWithResult(View v){
     Intent intent = new Intent(this, WithResultActivity.class);
     this.startActivityForResult(intent, REQUEST_CODE_1);
    }
  
    // 값을 받아오는 경우의 처리
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // TODO Auto-generated method stub
 super.onActivityResult(requestCode, resultCode, data);
  
 if(resultCode == Activity.RESULT_OK){
     if(requestCode == REQUEST_CODE_1){
  String result = data.getStringExtra("result");
  Toast.makeText(this, "RESULT=" + result,
      Toast.LENGTH_SHORT).show();
     }
 }
        else {
     Toast.makeText(this, "취소하고 그냥 옴.", Toast.LENGTH_SHORT).show();
 }
}    
}

값을 되돌려주는 ResultActivity.java

package net.br ;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class ResultActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
 super.onCreate(savedInstanceState);
 this.setContentView(R.layout.with_result);
    }
 
    public void onClickOk(View v){
 Intent intent = new Intent();
 intent.putExtra("result", "200원 받고 돌아왔음");
 this.setResult(Activity.RESULT_OK, intent);
 this.finish();
    }
 
    public void onClickCancel(View v){
 this.setResult(Activity.RESULT_CANCELED);
 this.finish();
    }
}

액티비티 하단의 토스트 확인 메시지는 넘겨주는 액티비티의 setResult(Activity.RESULT_OK, intent); 메써드에서 받아온 것을 메인 파일, IntentTestMainActivity.java에서 onActivityResult(int requestCode, int resultCode, Intent data)메써드로 처리한다.

즉, final로 선언된 REQUEST_CODE_1 값에 해당하면 getStringExtra(“전달명”) 또는 getIntExtra("전달명")으로 변수에 값을 입력해서 처리한다.