본문 바로가기
Android

startActivityForResult

by hiro1983 2016. 8. 5.

A Activity에서 B Activity로 이동 후  B Activity에서 할 일을 한 후 

A Activity가 호출 되는 순간 B Activity에서 처리 된 데이터를 가지고 A Activity에서 작업 필요 할 때 사용 한다.


일단 샘플 코드는 아래와 같다.


MainActivity.java

package net.hellohiro.startactivityforresult;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE = 100;
private static final String TAG = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void onNext(View v) {
Intent intent = new Intent(getBaseContext(), SubActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

Log.i(TAG, "requestCode : " + requestCode);
Log.i(TAG, "resultCode : " + resultCode);

String name = data.getExtras().getString("name");

if (requestCode == 100) {
if (resultCode == 1) {
Toast.makeText(getBaseContext(), "name : " + name, Toast.LENGTH_LONG).show();
}
}
}
}


 startActivityForResult는 인자값으로 intent외에 requestCode를 넘긴다.
 requestCode는 onActivityResult가 호출 되었을 때 어떤 Activity에서 넘어왔는지 확인 하기 위해  필요하다.


 resultCode는 SubActivity에서 결과코드로 보낸 값이다.

 data는 SubActivity에서 넘어온 데이터이다.


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="net.hellohiro.startactivityforresult.MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GoSubActivity"
android:onClick="onNext" />

</RelativeLayout>


SubActivity.java

package net.hellohiro.startactivityforresult;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class SubActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sub);

Intent intent = new Intent();
intent.putExtra("name", "hiro");
setResult(1, intent);
}

public void onBack(View v) {
finish();
}
}


 Intent 인스턴스를 생성하여 MainActivity로 보낼 데이터를 설정 할 수 있다.

 putExtra("key","value")를 이용하여 데이터를 설정 한다.

 setResult(resultCode, intent)를 이용하여 결과코드와 데이터를 보낸다. 


activity_sub.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="net.hellohiro.startactivityforresult.SubActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="GoMainActivity"
android:onClick="onBack" />
</RelativeLayout>


MainActivity에는 버튼 1개가 존재하고, 클릭 이벤트시 SubActivity로 이동한다.

SubActivity에서 데이터를 Intent에 넣은 후 SubAcitivity를 finish() 하면,

MainActivity의 onActivityResult 메서드가 실행된다.

'Android' 카테고리의 다른 글

IntentFlag  (0) 2016.08.08
Extra - PutExtra, getExtra  (0) 2016.08.05
IntentFilter - 전화걸기  (0) 2016.08.05
Zxing 라이브러리를 사용한 바코드 스캔  (0) 2016.01.12
Android Studio, GCM 3.0을 사용하여 Push 구현  (0) 2015.12.04