본문 바로가기

Development/Android

목록에서 링크걸기.

안드로이드에서 링크처리는 의외로 간단하다.
예를 들어서 텍스트뷰에서의 링크처리는 XML attribute 에서 autoLink="all" 정의만 해주면 웹사이트, 이메일, 전화 등등을 자동으로 처리해준다.
하지만 일반 액티비티가 아닌 어댑터를 확장한 클래스의 경우는 얘기가 달라진다.
우선,


02-09 14:40:26.263: ERROR/AndroidRuntime(8515): Uncaught handler: thread main exiting due to uncaught exception
02-09 14:40:26.302: ERROR/AndroidRuntime(8515): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.app.ApplicationContext.startActivity(ApplicationContext.java:553)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.content.ContextWrapper.startActivity(ContextWrapper.java:248)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.text.style.URLSpan.onClick(URLSpan.java:62)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:216)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.widget.TextView.onTouchEvent(TextView.java:6647)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.View.dispatchTouchEvent(View.java:3715)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1700)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1111)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1684)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1701)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.os.Looper.loop(Looper.java:123)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at android.app.ActivityThread.main(ActivityThread.java:4364)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at java.lang.reflect.Method.invokeNative(Native Method)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at java.lang.reflect.Method.invoke(Method.java:521)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-09 14:40:26.302: ERROR/AndroidRuntime(8515):     at dalvik.system.NativeStart.main(Native Method)



이런 오류가 발생하는데 시스템에서 어떤 task 에서 액티비티를 생성할지를 몰라서 발생하는 오류이다.
이는 일반적으로 FLAG_ACTIVITY_NEW_TASK 나 PendingIntent 등의 방법으로 해결할 수 있다.
하지만 어댑터를 확장한 클래스의 XML attribute 설정으로 처리한 경우는 액티비티를 생성하는 코드가 없어서 위의 방법은 사용할 수 없다.
다른 방법이 없을까 고민하다가 구글링을 해보니 context 를 받지 말고 this 를 사용해서 해결했다는 글이 있었다.
나같은 경우는 getApplicationContext() 를 사용하고 있었는데 그 부분을 this 로 수정해주니 해결이 되었다.


onCreate() 나 onStart() 에서
context 를 가져오는 부분인 getApplicationContext() 를 모두 this 로 수정.
 
 
 
 

'Development > Android' 카테고리의 다른 글

Error generating final archive: Debug Certificate expired  (0) 2011.07.18
파티톡 1.0.1 업그레이드.  (0) 2011.02.17
Widget Life Cycle.  (0) 2010.08.06
특별한 갤럭시S.  (0) 2010.08.05
Android Life Cycle 다른 그림.  (0) 2010.08.03