안드로이드 개발 질문/답변
(글 수 45,052)
액티비티 A와 B가 있습니다.
안드로이드 컴포넌트가 아닌 C라는 일반 자바 클래스가 잇구요
A에서 C클래스를 생성하여 그안에서 startActivity나 sendBroadcast등을 이용하여
액티비티B를 수행하고 싶은데요.
그러니까 흐름은..
A -> C -> B
(Activity) (Class) (Activity)
아무리 임포트를 해보고 해도 그냥 자바 클래스에서는 메소드가 나오지를 않네요 ㅠㅠ
방법이 없을까요?
2010.07.30 05:43:59
아니요. 그건 아니구요 class C = new C(); 여기꺄진 맞는데요
C.abc(); 이런식으로 C 클래스 내에 있는 매소드를 호출하고 싶어요
그 abc에 startActivity 같은 게 있구요
왜 이렇게 하나 싶으시겟지만..사정이 있어서.ㅠㅠ
일단 Activity 를 상속받지 않는 그냥 일반 클래스와 안드로이드 컴포넌트들간의 인텐트가 가는지 안가는지 테스트하려고 시작한건데요
이게 안되는거 같아서요 ㅠㅠ
2010.07.30 05:54:10
그래서 그냥 C클래스를 액티비티로 보일건 아니지만 그냥 상속만 ACtivity를 받아서 만들어보니..
A클래스에서 생성할떄 문제가 생기는거 같더라구요 ㅠㅠ
2010.07.30 06:02:44
인텐트에 대한 개념부터 정리해봅시다..
Intent 는 Context 끼리 신호를 주고 받기 위한 일종의 IPC입니다. Windowns 의 PostMessage 와 비슷합니다.
Context 를 상속받은 놈들 (대표적으로 Activity, Service..) 들이 사용할 수 있죠.
Context 를 상속받지 않은 class 에서 startActivity 를 사용하고 싶다고 하면
1. class 에 context 를 argument 로 줘서 보관시킨다. (예 : new C(this); public C(Context context) { mContext = context; }
2. class 를 Activity 아래에 inner class 로 만든다.
둘중에 하나가 아니면 Context 를 상속받지 않은 class 에서는 Intent 를 사용할 수 없습니다.
2010.07.30 06:42:28
아.. 1번 방법을 생각해 보고 있었는데요 제가 context에 대해 기본적으로 정리가 안되어있어서 생각이 정리가 안되구 있었어요.
급하게 해야할것만 검색하고 책보면서 하다보니 기본이 참 부족하다고 느껴지네요 ㅠㅠ
1번 방법을 어떻게 해야할지 잘한번 생각해 봐야겠어요^^ 감사합니다
2010.07.30 07:00:30
Darklake 님께서 말씀해주신 1번방법으로 해보려고하는데요
이게 C 클래스에서 인텐트로 생성하고 해서 Toast띄워주는 부분은 돌아가는데
startActivity가 안나오네요.. 혹시 몰라서 펜딩인텐트로도 해봤는데 두번째 액티비티가 실행이 안돼요.. 오류는 안나는데;;
public class Test{
Context myContext;
public void makeIntent() {
Toast.makeText(myContext, "test", Toast.LENGTH_LONG).show();
String test = "test";
Intent i = new Intent(myContext, IntentTest2.class);
i.putExtra("test", test);
PendingIntent pendingIntent = PendingIntent.getActivity(myContext, 0, i, PendingIntent.FLAG_ONE_SHOT);
try{
pendingIntent.send();
}catch(Exception e){
e.printStackTrace();
}
}
public Test(Context context){
myContext = context;
}
}
2010.07.30 09:08:56
Context에는 startActivity가 없습니다.
해당 Context를 Activity로 캐스팅 후 사용하시던지 아니면 Activity객체를 매개변수로 넘겨받는 방법을 사용 하셔야 합니다.
2010.07.30 16:52:41
http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)
Context 에 대한 doc 인데요..
문서 하단에 startActivity 있습니다만.. ㅡ.ㅡ;
그리고 제 코드에서도
getContext().startActivity(intent);
로 사용하는 부분이 많습니다.
park 님 확실하신 정보인가요?
Context 에 대한 doc 인데요..
문서 하단에 startActivity 있습니다만.. ㅡ.ㅡ;
그리고 제 코드에서도
getContext().startActivity(intent);
로 사용하는 부분이 많습니다.
park 님 확실하신 정보인가요?
class C = new C();