[안드로이드 Intent] startActivity(), startActivityForResult()를 통한 페이지 넘어가기
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(); // 액티비티를 끝낸다.}
});
}
출처 : http://mailmail.tistory.com/15
'안드로이드 > 개발 TIP' 카테고리의 다른 글
[안드로이드&JAVA 데이터 처리] JSON. Using the JSONObject in android and java. (0) | 2018.09.12 |
---|---|
[안드로이드 HTTP 통신] HttpURLConnection으로 웹서버 통신하기 (0) | 2018.09.12 |
[안드로이드 퍼미션 체크] android permission check (0) | 2018.09.12 |
[안드로이드 비동기 처리] AsyncTask (0) | 2018.09.12 |
[파이어베이스] Firebase 란 (0) | 2018.09.10 |
Android Handler 와 관련된 postDelayed() 메소드 (0) | 2018.01.19 |
Mobile App GUI Designer 입문 가이드 - 디자인툴 (0) | 2017.11.13 |
안드로이드 이미지 리사이징 9patch resizer (0) | 2017.11.13 |