본문 바로가기

Android Develop

[Android] 우여곡절 개발기 : Fragment에서 Dialog 값 받아오기

728x90
반응형

앱을 만들면서 기존에 만들어둔 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로 잘 넘어오는 걸 확인할 수 있습니다 :)

 

 

 

 

728x90
반응형