차근차근/Android

Activity가 아닌 클래스에서 Activity를 실행할 수 있나요?

예쁜꽃이피었으면 2014. 9. 2. 11:29

안드로이드 화면전환

http://www.androidpub.com/153328





질문

Activity 클래스에서 다른 클래스를 불러와서

그 다른 클래스에서  아래와 같이 Activity를 실행하면


startActivity(intent);


java.lang.nullpointerexception 에러가 나는데...


Activity 실행은 현재 Acrivity에서 밖에 안되나요?


intent 생성시 부모의 context를 넘겨 주었는데요. 위와 같이 에러가 나네요.


혹시 아시는 분 계시면 조언 부탁드립니다.



추가로 자세히 상황을 말씀드리면 현재 View 부분과 Module처리 부분을 나눠서

View 부분이 다른 클래스로 나눠져 있는 상태 입니다.

그래서 Button이 다른 클래스에 선언이 되어 있습니다.

그런데 거기서 Activity를 호출하면 아래와 같이 애러가 나는 군요.


    btn_MapView.setOnClickListener(new Button.OnClickListener()

        {

            public void onClick(View v) {

                intent = new Intent(context, GoogleMapView.class); context는 상위 Activity클래스의 Context

                startActivity(intent);

            }

        });



=====> 답1

얼마전에 저도 겪었던 문제네요.

하지만 상위 Activity의 context를 통해서 다른 Activity 실행하는 것이 가능합니다.

문제는 이럴 경우 startActivity 만 가능하고 startActivityForResult가 불가능하기 때문에

상당히 제약이 많더군요.



=====> 답2

자식 클래스에서 부모 엑티비티 클레스로 새로운 엑티비티를 실행하게 하세요.

엑티비티 콘텍스트가 아닌 경우 pendingintent로 실행하기도 하더군요~~



=====> 답3

아, 해결방법은 위에 다들 잘 설명해 주셔서 안적었는데요, 

제가 사용했던 코드는 아래와 같습니다.


//전역변수 선언

Context mContext;


//생성자

mContext = context;


btn_MapView.setOnClickListener(new Button.OnClickListener()

        {

Intent intentStartStation = new Intent( mContext,

Dialog_Activity.class );

intentStartStation.putExtra("stationName", "구로디지털단지");

mContext.startActivity(intentStartStation);

}


생성자에서 상위 Activity의 Context를 변수에 담아놓고 그걸로 startActivity 하면 됩니다.


유의하실 점은 위에 말씀드린대로 startActivityForResult가 불가능하기때문에 이것이 필요하다면

차라리 구조를 다시 짜시는 것이 현명하실거라 생각됩니다.

성공하세요~



반응형