본문 바로가기

Application Programming Interface/Android

인텐트를 통한 액티비티간 결과값 전달하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 MainActivity에서 SubActivity로 대화상자를 띄우고 그 결과를 MainActivity가 받고자 하는 경우...

1. MainActivity에서 SubActivity를 호출하는 부분

public class MainActivity extends Activity implements View.OnClickListener
{
	// SubActivity를 모달 다이얼로그로 띄우는 동작을 ACTIVITY_CODE_DEFAULT (0)으로 정의합니다.
	public static final int ACTIVITY_CODE_DEFAULT = 0;

	// ... 중략 ...

	@Override
	public void onClick(View v)
	{
		// MainActivity 내 어떤 버튼을 클릭하여 SubActivity를 모달 다이얼로그처럼 띄웁니다.
		Intent intent = new Intent(MainActivity.this, SubActivity.class);
		intent.putExtra("value", "테스트");
		this.startActivityForResult(intent, ACTIVITY_CODE_DEFAULT);
	}
}

2. SubActivity에서 MainActivity로 결과를 전달하는 부분

public class SubActivity extends Activity implements View.OnClickListener
{
	// SubActivity를 띄운 결과가 인텐트에 실려 MainActivity로 전달되는데, 이 때 값의 이름을 정의합니다.
	public static final String INTENT_NAME_RESULT = "result";

	private Button buttonYes = null; // [예(Y)] 버튼
	private Button buttonNo = null; // [아니오(N)] 버튼
	private Button buttonCancel = null; // [취소(C)] 버튼

	// ... 중략 ...

	@Override
	public void onClick(View v)
	{
		Intent intent = new Intent();
		if (v == null)
		{
		}
		else if (v.equals(this.buttonYes))
		{
			intent.putExtra(INTENT_NAME_RESULT, "예"); // 또는 intent.setAction("예");
		}
		else if (v.equals(this.buttonNo))
		{
			intent.putExtra(INTENT_NAME_RESULT, "아니오"); // 또는 intent.setAction("아니오");
		}
		else if (v.equals(this.buttonCancel))
		{
			intent.putExtra(INTENT_NAME_RESULT, "취소"); // 또는 intent.setAction("취소");
		}
		else
		{
		}
		this.setResult(Activity.RESULT_OK, intent);
		this.finish();
	}
}

3. SubActivity가 닫히고 MainActivity로 돌아올 때 결과 얻기

public class MainActivity extends Activity implements View.OnClickListener
{
	public static final int ACTIVITY_CODE_DEFAULT = 0;

	// ... 중략 ...

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == ACTIVITY_CODE_DEFAULT && resultCode == Activity.RESULT_OK)
		{
			if (data != null)
			{
				// 결과 가져오기
				String result = data.getStringExtra(SubActivity.INTENT_NAME_RESULT); // 또는 data.getAction();
			}
		}
	}
}