brunch

You can make anything
by writing

C.S.Lewis

by 윤형도 Mar 08. 2016

빠르게 배우는 안드로이드 -18
Intent -4

데이터전송(기본데이터형)-2



위 강의에 이어서 진행합니다.


이번에는 Main2Activity에서 MainActivity로 데이터를 전송하는방법을 알아보겠습니다. 기본적으로 안드로이드는 Activity에서 다른 Activity를 호출하면
2번째 Activity가 첫번째 Activity위에 있는 stack 구조로 되어있습니다.
따라서 2번째 Activity가 종료되면 첫번째 엑티비티가 나오게 되기 때문에 종료시 인텐트를 넘기는 방법을 사용합니다.

안드로이드에서 엑티비티를 종료하는 방법은 2가지 입니다 
물리적인 뒤로가기키를 누르는것과 finish()함수를 호출하는것입니다.

onBackPressed()를 Override해보도록합시다.    

onBac입력하면 자동완성에서 onBackPressed를 알려줍니다. 이 전강의들에
서 사용한    

혹은    

혹은 ctrl + O (window기준) 을 입력하여 onBackPressed를 찾으셔도됩니다.

onBackPressed는 뒤로가기키를 누르면 호출되는 곳입니다.
super.onBackPressed()에서 activity를 종료하거나 더이상 종료할 activity가 없으면 앱을 종료시켜주는 역할을 수행합니다.

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

다음과 같은 코드를 추가하면됩니다.

setResult(int RESULT_CODE,Intent intent);
finish();

Result_CODE는 결과를 나타내는 코드부분으로 한가지 결과만을 받으면 상관없지만 만약에 엑티비티 종료시 호출되어야되는 결과가 2가지 이상일때 이 Reuslt_code 를 변경하여 MainActivity에 알려줄수있도록 설계가 되어있습니다.
intent 부분에는 putExtra로 데이터를 추가해놓으시면됩니다.
다음 finish()함수를 통해 엑티비티를 종료하면됩니다.

다음의 코드로 변경합시다.

@Override
public void onBackPressed() {
    Intent intent2 = new Intent();
    intent2.putExtra("result","OK");
    setResult(1234, intent2);
    finish();
}


이제 종료시 Main2Actvitiy에서 MainActivity로 데이터가 전송될것입니다.


MainActivity를 수정하여 데이터를 받아봅시다.

다음부분에서 startActivity(intent3)로 Main2Activity를 실행하고
 데이터를 전송해주었는데요 우리는 Main2Activity가 종료될때 데이터를 
전송받을것이므로 startActivity가 아닌 
startActivityForResult(Intent intent,int request_code); 를 통해서
 Activity를 실행해야합니다.

 intent를 넣는 부분은 동일하고 request_code를 넣게 되어있습니다.

request_code를 넣게 되있는데 이 부분은 MainActivity에서 여러개의 activity를 실행하고 각 엑티비티들에서 결과를 받을 경우가 있을수 있습니다.

이때 어떤 activity를 호출하였는 구별해주는 역할을 해주게됩니다


//원본

case R.id.activity2_btn :
    Intent intent3 = new Intent(MainActivity.this,Main2Activity.class);
    intent3.putExtra("tel",num_textView.getText().toString());
    intent3.putExtra("cnum",1234);
    startActivity(intent3);
    break;


//수정

Intent intent3 = new Intent(MainActivity.this,Main2Activity.class);
intent3.putExtra("tel", num_textView.getText().toString());
intent3.putExtra("cnum", 1234);
startActivityForResult(intent3,1111);
break;

이제 본격적으로 받아 보도록합시다.

MainActivity에

onActivityResult를 Override받도록합니다.


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
}

requestCode와 resultCode , Intent가 받아와지는것을 볼수있습니다.

다시한번 정리하자면
 requestCode는 MainActivity에서 Main2Activity를 구별하기위해 사용하는부분
resultCode는 Main2Activity에서 어떠한 결과코드를 주었는지에 대한 부분이고
Intent data에는 Main2Activity에서 보낸 결과 데이터가 들어있는 부분입니다.

코드를 다음과같이 수정하고 애뮬레이터를 실행하여 로그를 확인해보도록합시다.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1111){
            if(resultCode==1234) {
        Log.v("MainActivity", "Main2Acitiy result : " + data.getStringExtra("result"));
            }
    }
}    

Activity2 버튼클릭

뒤로가기 버튼을 눌러서 이전 화면으로 이동    

결과값을 받은것을확인할수 있습니다.

다음 강의에서는 내가 만든 클래스를 전송하는방법을 알아보겠습니다.

매거진의 이전글 빠르게 배우는 안드로이드 -17 Intent -3
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari