안녕하세요. 안드로이드 PEACE-입니다.
안드로이드 스터디 [열 두번째] 글입니다.
MainActivity.class
MainActivity에서는 Intent객체와 putExtra()메서드를 이용해 Activity의 새 인스턴스를 시작하고 데이터를 넘겨준다. 즉 MainActivity.class - > NextActivity.class의 과정이다. Intent객체의 인자로는 현재 Context(MainActivity.this)와 시작될 Activity(NextActivity.class)를 넣어준다. putExtra()는 넘겨줄 데이터에 대한 key와 value를 하나의 세트로 MainActivity에 담는다. putExtra()의 value는 String, int, float등 여러 자료형의 데이터를 담을 수 있으며 배열이나 리스트를 담을 수 도 있다. 그리고 마지막으로 startActivity()를 통해 새 액티비티의 인스턴스를 시작한다.
Intent intent = new Intent(현재 Context, 새로 시작될 Class);
intent.putExtra(key, value);
startActivity(intent);
// 인텐트 참조
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
// 인텐트의 putExtra()로 넘길 데이터
ArrayList<String> strList = new ArrayList<String>();
strList.add("리스트1");
strList.add("리스트2");
// putExtra
intent.putExtra("strData", "문자열");
intent.putExtra("strListData", strList);
// 인텐트 대해 startActivity()수행
startActivity(intent);
NextActivity.class
Intent intent = getIntent();
String str = intent.getStringExtra(key);
ArrayList<String> strList = intent.getStringArrayExtra(key);
Intent intent = getIntent();//이전 액티비티로부터 넘겨진 인텐트 = 현재 Activity인스턴스를 시작한 인텐트 반환
String getData = intent.getStringExtra("strData") + "\n" + intent.getStringArrayListExtra("strListData");
3. startActivityForResult()를 통한 결과 받기
Intent intent = new Intent(현재 Context, 새로 시작될 Class);
startActivityForResult(intent, 요청코드);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 요청코드){
if (resultCode == Activity.RESULT_OK){
Log.e("LOG", "결과 받기 성공");
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 위젯 참조.
bt_intent = (Button)findViewById(R.id.bt_intent);
// 온클릭 리스너 처리.bt_intent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 인텐트 참조.
Intent intent = new Intent(MainActivity.this, NextActivity.class);
// 인텐트 대해 startActivityForResult()수행.
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1){
if (resultCode == Activity.RESULT_OK){
Log.e("LOG", "결과 받기 성공");
}
}
}
NextActivity.class
NextActivity에서는 받은 데이터를 처리하거나 setResult()를 통해 이전 액티비티로 결과를 돌려준다. setResult()의 첫번째 자로는 결과코드를 넣어준다. 두번째 인자에는 putExtra()로 데이터를 담은 Intent를 넣어줄 수 있고 비울 수 도있다. Intent를 넣어줄때 Intent객체는 setResult()되므로 인자에 Context와 Class를 비운다. 또한 Intent에 getIntent()로 이전 액티비티로부터 Intent를 얻은 경우에도 setResult()의 두번째 인자로 Intent를 넣을 수 있다. 그리고 그 안에 담긴 데이터도 전달된다.
* 주요 소스1
setResult(결과코드)
* 주요 소스2
Intent intent = new Intent(); // 객체 생성자의 인자에 아무 것도 넣지 않는다.
setResult(결과코드, intent);
* 주요 소스3
Intent intent = getIntent();
setResult(결과코드, intent)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
tv_outPut = (TextView)findViewById(R.id.tv_outPut);
bt_back = (Button)findViewById(R.id.bt_back);
bt_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {setResult(Activity.RESULT_OK); // 결과코드를 'RESULT_OK'로 세팅. 이후 이전 액티비티로 돌아가 onActivityResult()가 호출됨.finish(); // 액티비티를 끝낸다.}
});
}