안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요.
A, B, C라는 class가 있습니다.
A -> B
B - > C
C -> A
위와 같이
A에서 B를 호출하고 B에서 나온 데이터를 C로 넘기고 C에서 얻은 데이터를 A로 보내주어야 합니다.
보통
A -> B에서 startActivityForResult()를 사용하여 B -> A 로 돌아오게 사용을 하는데
위와 같이 B에서 C로 갈경우 어떻게 해야 할까 고민중 입니다.
처음 생각이 아래와 같이 setResult()를 사용하지 않고 그냥 startActivity()만 사용하여 아래와 깉이 해야지 했는데...
1번
A -> B : startActivity(); finish()
B -> C : startActivity(); finish()
C -> A : startActivity(); finish()
다시 생각을 하니 아래와 같이 하는게 웬지 순리인것 같고 해서 질문을 합니다.
2번
A -> B : startActivityForResult();
B -> C : startActivityForResult();
C -> B : setResult(); finish()
B -> A : setResult(); finish()
추가적으로
A에서 생성된 데이터는 A에서만 필요로 하고 B와 C에서는 불필요 합니다.
이런경우 A->B->C->A로 올때 그대로 유지가 되어 있어야 하는데
그렇게 되면 1번의 경우 intent 할때마다 데이터를 가지고 다녀야 되는것 같습니다.
따라서 2번이 더 좋은것 같은데....
조언 부탁드립니다.
A, B, C라는 class가 있습니다.
A -> B
B - > C
C -> A
위와 같이
A에서 B를 호출하고 B에서 나온 데이터를 C로 넘기고 C에서 얻은 데이터를 A로 보내주어야 합니다.
보통
A -> B에서 startActivityForResult()를 사용하여 B -> A 로 돌아오게 사용을 하는데
위와 같이 B에서 C로 갈경우 어떻게 해야 할까 고민중 입니다.
처음 생각이 아래와 같이 setResult()를 사용하지 않고 그냥 startActivity()만 사용하여 아래와 깉이 해야지 했는데...
1번
A -> B : startActivity(); finish()
B -> C : startActivity(); finish()
C -> A : startActivity(); finish()
다시 생각을 하니 아래와 같이 하는게 웬지 순리인것 같고 해서 질문을 합니다.
2번
A -> B : startActivityForResult();
B -> C : startActivityForResult();
C -> B : setResult(); finish()
B -> A : setResult(); finish()
추가적으로
A에서 생성된 데이터는 A에서만 필요로 하고 B와 C에서는 불필요 합니다.
이런경우 A->B->C->A로 올때 그대로 유지가 되어 있어야 하는데
그렇게 되면 1번의 경우 intent 할때마다 데이터를 가지고 다녀야 되는것 같습니다.
따라서 2번이 더 좋은것 같은데....
조언 부탁드립니다.

give & take
2011.02.16 11:14:50
A -> B : startActivityForResult(); setResult(); finish();
A -> C : startActivityForResult(); setResult(); finish();
A -> C : startActivityForResult(); setResult(); finish();
A 엑티비티에서 Result를 받을때 넘어온 result code나 intent 파라메타에 따라 B나 C 엑티비티를 실행하면 될것 같습니다..
2011.02.16 11:22:58
육봉달님 딸기님 빠른 조언 감사합니다.
일단 설명이 부족하여 딸기님이 잘못 이해하신것 같습니다.
A에서 조건에 따라 B나 C를 선택 호출하는 것이 아니라 A -> B -> C -> A 이렇게 반드시 순차적으로 이어지는 내용입니다.
그리고 육봉달님이 말씀하신 의미는 intent간 데이타를 주고 받을수 있으니 1번, 2번 상관없이 사용을 하면 된다는 말씀이신게 맞나요?
한가지 추가를 하자면 데이타가 arraylist입니다. arraylist를 인텐트로 주고 받을때 성능이나 메모리에 무슨 영향을 끼치는지는 저도 잘 모르지만 혹시나 하는 마음에 추가적으로 질문을 드립니다.
일단 설명이 부족하여 딸기님이 잘못 이해하신것 같습니다.
A에서 조건에 따라 B나 C를 선택 호출하는 것이 아니라 A -> B -> C -> A 이렇게 반드시 순차적으로 이어지는 내용입니다.
그리고 육봉달님이 말씀하신 의미는 intent간 데이타를 주고 받을수 있으니 1번, 2번 상관없이 사용을 하면 된다는 말씀이신게 맞나요?
한가지 추가를 하자면 데이타가 arraylist입니다. arraylist를 인텐트로 주고 받을때 성능이나 메모리에 무슨 영향을 끼치는지는 저도 잘 모르지만 혹시나 하는 마음에 추가적으로 질문을 드립니다.
2011.02.16 11:28:37
네.. 제가 말씀드린건 1번 2번 상관없이 서로 intent는 상호간의 하나의 *관계* 이기때문에
get, put만 사용을 잘해주시면 데이터간의 이동은 주고받을수가 있어요.
또한 데이터가 배열이라 메모리에 영향을 끼치는것은 아무 의미없다고 전 생각하고요.
배열을 주고받을때 객체전달이 제대로 이뤄지냐가 중요할것같습니다.
get, put만 사용을 잘해주시면 데이터간의 이동은 주고받을수가 있어요.
또한 데이터가 배열이라 메모리에 영향을 끼치는것은 아무 의미없다고 전 생각하고요.
배열을 주고받을때 객체전달이 제대로 이뤄지냐가 중요할것같습니다.




예를들어서 알려드릴께요 값을 가지고 간다는건
A클래스
Intent intent = new intent(this, B.class);
intent.putExtra("넘어갈값" ,"어떤형태로넘길것인지"); ex> "넘어갈값: hi" 변수명.getText().toString());
startactivity(intent);
B클래스
Intent intent = this.getIntent(); //intent 라는 것을 받아서 읽어드립니다.
hi = intent.getExtras().get("넘어온값 : hi").toString();
데이터간의 이동은 이런식으로 합니다.
어떤식으로 하던지 옮겨갔다가 오는건 쉽게 데이터이동이 가능하기때문에
어떠한 class로 이동할지 명시적으로 호출만해주고 받는다면
그다지 큰 어려움은 없어보입니다.
결과적으로 위의 소스는 예제일뿐이지만 글쓴이님이 데이터간의 이동을
생각만 잘하신다면 문제없을거라고 봅니다