setActivity() 메소드를 통해 액티비티 전환을 할 수 있었는데
이전 액티비티의 데이터를 받아야 할 때, 어떻게 해야하는지 궁금하 지 않습니까?
예로, 주소록 어플에서 상세 액티비티에서 추가 액티비티로 이동하여 저장할때 저장한 값을 받아오는 경우 처럼 입니다.
그럴때는 setActivityForResult(Intent intent, int requestCode) 메소드를 사용합니다.
파라미터는 요청 인텐트와 결과값으로 받을 요청코드 입니다.
샘플을 보면
Intent intent = new Intent(aaa.this, bbb.class);
startActivityForResult(intent,1);
요청 후, bbb 액티비티의 결과를 받는 코드입니다.
protected void onActivityResult(int requestCode, int resultCode, Intent data){
TextView name_view = (TextView)findViewById(R.id.name_view);
TextView digit_view = (TextView)findViewById(R.id.digit_view);
if( resultCode == RESULT_OK){
if( requestCode == 1) {
name_view.setText(data.getStringExtra("data_name"));
digit_view.setText(data.getStringExtra("data_digit"));
}
}
}
일단 여기에서 보면 onActivityResult() 메소드는 Activity 클래스의 보호된 메소드 입니다.
이 코드만으로 돌아간다고 하면 액티비티의 결과값은 시스템의 의해서 결과값이 들어오면
자동으로 onActivityResult() 메소드가 호출되는 것 같습니다.
그리고 아래 if( resultCode == RESULT_OK ) 부분은 이전 액티비티의 결과 값을 받은것으로
추측이 되고 if( requestCode == 1 ) 부분을 보면 aaa 액티비티에서 호출할때 보내준 요청값을
구분하여 구현되어 있고 onActivityResult() 메소드는 여러 요청의 결과를 수신해주고
개발자가 setActivityForResult() 메소드의 요청코드에 의해 구분해서 구현해야 할 것 같다는 생각이 듭니다.
따라서 복잡한 액티비티 구현이 되면 요청코드가 중복이 안되게 주의해야 할 것 같습니다.
또, 아마도 이전 액티비티의 결과값을 수신하는 일은 비동기로 호출되는 것 같습니다. (?)
이를 확인하고자 bbb 액티비티의 코드를 볼까요?
Button input_info = (Button)super.findViewById(R.id.input_info);
input_info.setOnClickListener(new Button.OnClickListener() {
public void onClick(View view){
Intent intent = getIntent();
EditText name_input = (EditText)findViewById(R.id.name_input);
EditText digit_input = (EditText)findViewById(R.id.digit_input);
intent.putExtra("data_name", name_input.getText().toString());
intent.putExtra("data_digit", digit_input.getText().toString());
setResult(RESULT_OK, intent);
finish();
}
});
이로 보면, Intent intent = getIntent(); 로 현재 요청된 인텐트 가져와 사용자에게 입력된 데이터를
넣고 setResult(RESULT_OK, intent); bbb 액티비티의 결과를 전송해주는 것으로 볼 수 있습니다.
위의 샘플에서 보면 꼭 putExtra(), getIntent(), getStringExtra(), setText() 등의 꼭 알아야 할 메소드들이
많습니다.
'개발관련 > Android' 카테고리의 다른 글
| 사용자 뷰 만들기 - 새로운 뷰 만들기 (0) | 2010/09/05 |
|---|---|
| 사용자 뷰 만들기 - 기존뷰 재정의하기 (0) | 2010/09/03 |
| Intent - 액티비티간 데이터 받기 (0) | 2010/09/01 |
| Intent - 암시적인 인텐트 호출 (0) | 2010/09/01 |
| Intent - 명시적인 인텐트 호출 (0) | 2010/09/01 |
| 안드로이드 개발환경 구축하기 (0) | 2010/08/31 |



댓글을 달아 주세요