앱을 만들면서 기존에 만들어둔 Fragment에서
Activity로 만들어진 Dialog를 띄우고, 그 Dialog 에서 입력한 값을 받아와야 할 일이 생겼습니다.
찾아보니 방법이 여러가지 있는데,
그 중 하나는 thread를 이용해서 Dialog를 호출하는 부분을 thread로 넣어주고
그 thread가 끝날 때까지 주 thread에서 기다려주는 방법이었고,
다른 하나가 지금 제가 설명드리고자 하는 방법입니다.
먼저 기존의 Fragment에서 아래와 같이 버튼이 클릭되었을 때의 코드를 작성합니다.
Dialog에서 값을 받아오기 위해서 startActivityForResult를 사용해줍니다.
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, MyDialog.class);
startActivityForResult(intent, 2);
}
});
저 2라는 숫자는 RequestCode로, startActivityForResult를 다른 곳에서 사용할 때와 구분해서 사용하였습니다.
이제 이 StartActivityResult 결과를 반환하는 함수를 아래처럼 작성해줍니다.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2){
if(data != null){
name = data.getStringExtra("name"));
}
}
}
StartActivityResult를 작성해준 Fragment 파일 안에 onActivityResult를 작성주면,
Activity가 전달한 데이터가 Intent data로 넘어오게 됩니다.
그러면 resultcode로 구분해서 해당 Activity로부터 전달받아야 하는 데이터를 이제 사용할 수 있습니다!
Dialog 액티비티에서 아래처럼 작성하여 데이터를 fragment로 전달해줍니다.
okButton.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
Intent intent = new Intent();
intent.putExtra("name", et_name);
setResult(2, intent);
finish();
}
});
Run하면 Dialog에서 입력한 name이 잘 Fragment로 잘 넘어오는 걸 확인할 수 있습니다 :)
'Android Develop' 카테고리의 다른 글
[Android] 우여곡절 개발기 : Bitmap 이미지 업로드가 느릴때 (0) | 2021.01.23 |
---|---|
[Android] 액티비티의 생명주기 (0) | 2021.01.23 |
[Android] Manifest file이란? (매니페스트 파일의 역할) (0) | 2021.01.15 |
[Android] 안드로이드 4대 컴포넌트 (0) | 2021.01.02 |
[Android] 객체 직렬화, Serializable (0) | 2020.12.19 |