Android Studio startActivityForResilt 메서드 활용예제
안녕하세요 오늘은 안드로이드 스튜디오에서 Activity 간 데이터를 주고받을 때 사용하는 startActivityForResilt 메서드에 대해서 실습하며 알아보려고 합니다!
여기서 startActivityForResilt에서 전달되는 파라미터 값은 인텐트(intent) 와 정수로 된 코드 값(requestCode)인데 코드값은 일반적으로 액티비티를 구별하기 위해 사용됩니다. 예를 들어 액티비티에서 새 액티비티를 뜨우기만 하는 것은 startActivity 메서드로 구현해도 상관은 없습니다. 하지만 새로운 액티비티에서 원래의 액티비티로 돌아오면서 새로운 액티비티의 응답을 처리해야 하는 경우가 많습니다. 이러한 경우에는 어떤 액티비티로부터 돌아온 응답인지 구분해야 이 응답을 처리할 수 있습니다. 이런 경우를 처리하기 위하여 새 액티비티에서는 startActivity 메서드를 사용하지 않고 startActivityForResult 메서드를 사용합니다!
시작해보겠습니다!
우선 화면전환을 하기 위해서는 2개의 Activity화면을 만들어 주세요!!
만드신 후 AndroidMenifest 파일에 들어가 android:lavel="메뉴 액티비티" android:theme="@style/theme.AppCompat.Dialog"를 화면 전환할 액티비티에 추가해주세요
android:lavel 속성은 화면의 제목을 설정할 때 사용하는 것이며 android:theme 속성은 테마를 설정할 때 사용합니다. 저는 속성 값을 android:theme="@style/theme.AppCompat.Dialog" 이렇게 주었는데요
이렇게 설정해주시면 액티비티가 대화 상자 형태로 나 타탑니다! 자 다음으로 넘어가겠습니다.
이제 Dialog 속성을 지정해준 MenuActivity.xml 파일을 열어 버튼 하나를 가운데에 추가해주신 후 텍스트 속성을 지정 재주며 id도 지정해주세요! 자 다음 MenuActivity.java 파일을 열어 소스코드를 추가해보겠습니다!
설명은 밑에 주석으로 코드와 함께 설명하도록 하겠습니다!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
Button btn_intent = findViewById(R.id.btn_intent); // xml에서 지정해준 아이디의 버튼 객체를 참조해줍니다.
btn_intent.setOnClickListener(new View.OnClickListener() { // 버튼에 대하여 원클릭 이벤트를 설정해줍니다.
@Override
public void onClick(View view) {
Intent intent = new Intent(); // 인텐트 객체를 생성하고 name의 값을 부가 데이터로 넣어줍니다.
intent.putExtra("name", "mike"); // putExtra를 메서드를 활용하여 키(Key) = name와 값(Value) = mike를 넣어줍니다.
setResult(RESULT_OK, intent); // setResult를 활용하여 인텐트 객체가 파라미터로 전달되며 이 메서드는 새로 띄운
응답 코드 , 인텐트 // 액티비티에서 이전 액티비티로 인텐트를 전달하고 싶을 때 사용하는 메서드입니다.
finish(); // 현재 액티비티를 없애줍니다.
}
});
}
}
다음으로!
자 이제 mainActivity.xml로 넘어가 볼 텐데요 이전 menu.xml과 같이 버튼 하나를 가운데 추가해줍니다!
버튼에 대한 아이디를 지정해주시고 이제 mianActivity.java 파일의 소스코드를 작성해봅시다!
main.java의 소스코드입니다 설명은 아래 소스코드와 함께 작성하겠습니다.
public class SampleIntent extends AppCompatActivity {
public static final int REQUEST_CODE_MENU = 101;
// 새 액티비티를 띄울 때 보낼 요청 코드입니다. 이 값은 나중에 새 액티비티를 띄울 때 다시 전달받을 값입니다. 이런 식으로 어떤 액티비티로부터 온 응답인지 구분이 가능합니다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample_intent);
Button btn_main_int = findViewById(R.id.btn_main_int); // 버튼 객체에 대한 참조
btn_main_int.setOnClickListener(new View.OnClickListener() { // 버튼에 원클릭 이벤트 추가
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
startActivityForResult(intent , REQUEST_CODE_MENU);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { //onActivityResult 생성해주신 후
super.onActivityResult(requestCode, resultCode, data); // 파라미터 안에 들어있는 저 3개만 남기고 지워주세요!!!!!
if (requestCode == REQUEST_CODE_MENU){
Toast.makeText(getApplicationContext(), "OnActivity 메서드 호출됨. 요청코드요청 코드"
+ requestCode+"결과 코드" + resultCode, Toast.LENGTH_LONG).show();
if (resultCode == RESULT_OK){
String name = data.getStringExtra("name");
Toast.makeText(getApplicationContext(), "응답으로 전달된 name :" +
name, Toast.LENGTH_LONG).show();
}
}
}
}
추가 적인 설명
onActivityResult(int requestCode, int resultCode, Intent data)
첫 번째 파라미터 값은 액티비티를 띄울 때 전달했었던 요청 코드 이 값으로 어떤 액티비티로부터 응답을 받을 것인지 구분 가능
두 번째 파라미터 값 새 액티비티로 부터 전달된 응답 코드이며 응답 코드는 정상인지 아닌지를 구분하는 데 사용됨
보통 Activity.RESULT_OK 상수를 전달하는 방법으로 정상 처리임을 알림 내가 임의로 만들 수도 있음 예 성공인 경우 200200 실패한 경우 400
세 번째 파라미터 값은 새 액티비티로부터 전달 받은 이 엔텐트안에 새 액티비티로 부터 원래의 액티비티로 데이터를 전달할 때 사용된다
인텐트 객체에 데이터를 넣는 방법은 가장 간단한 방법 중 하나인 putExtra 메서드가 있다. 이 메서드를 사용할 때 에는
키(Key)와 데이터 값(Value)을(Value) 쌍으로 넣어줘야 한다. 물론 이 값을 다시 확인할 경우에는 키(key)를 사용해 데이터 값을 가져올 수 있다.
이제 앱을 한번 실행해 보도록 하겠습니다.!
앱 실행 시 화면입니다! 이제 메뉴 화면은 버튼을 눌러 띄워보겠습니다.
메뉴 액티비티는 속성 값을 Dialog로 줬기 때문에 대화 상자 형태로 나옵니다!
이제 돌아가기 버튼을 눌러보겠습니다!
요청 코드 값과 결과 코드값이 나옵니다!! 그 후에 아래와 같은 토스트도 하나 더 뜹니다.
putExtra 메서드를 활용하여 응답으로 전달된 키(key) = "neme"와 값(Value) = "mike"을 확인하실 수 있습니다.
이상으로 Android Studio startActivityForResilt 메서드 활용 예제를 마치도록 하겠습니다.