Clicking an HTML link in a TextView raises a strange AndroidRunTimeException

I extract the HTML from my site and put it in a TextView. This HTML code may contain anchor tags that point to web pages, emails, etc. I am trying to make these links accessible by clicks so that when a user clicks on it, the default browser will open a web page. I do this by following the instructions on this - How do I make links in a text click? and a couple of other sources on the Internet.

So my code looks something like this:

TextView para=new TextView(getApplicationContext()); LayoutParams lpfortext=new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); lpfortext.setMargins(10, 10, 10, 10); para.setText(Html.fromHtml(e.html())); para.setMovementMethod(LinkMovementMethod.getInstance()); para.setLinksClickable(true); //error exists on removing this para.setAutoLinkMask(Linkify.ALL); //error exists on removing this para.setLayoutParams(lpfortext); 

But when I actually click on the link in the application (on the phone ICS has not been tested on the emulator yet), I get the following error (snapshot of the stack trace, full text at the end):

 11-18 13:17:51.503: E/AndroidRuntime(6010): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 11-18 13:17:51.503: E/AndroidRuntime(6010): at android.app.ContextImpl.startActivity(ContextImpl.java:1095) 11-18 13:17:51.503: E/AndroidRuntime(6010): at android.content.ContextWrapper.startActivity(ContextWrapper.java:276) 11-18 13:17:51.503: E/AndroidRuntime(6010): at android.text.style.URLSpan.onClick(URLSpan.java:62) 11-18 13:17:51.503: E/AndroidRuntime(6010): at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:212) 

Any ideas what might cause the error and how to fix it?

EDIT: Full trace as requested below -

 11-18 13:45:09.741: E/AndroidRuntime(7946): FATAL EXCEPTION: main 11-18 13:45:09.741: E/AndroidRuntime(7946): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.app.ContextImpl.startActivity(ContextImpl.java:1095) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.content.ContextWrapper.startActivity(ContextWrapper.java:276) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.text.style.URLSpan.onClick(URLSpan.java:62) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:212) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.widget.TextView.onTouchEvent(TextView.java:8835) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.View.dispatchTouchEvent(View.java:5579) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1965) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1734) 11-18 13:45:09.741: E/AndroidRuntime(7946): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1982) 11-18 13:45:09.741: E/AndroidRuntime(7946): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1441) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.app.Activity.dispatchTouchEvent(Activity.java:2421) 11-18 13:45:09.741: E/AndroidRuntime(7946): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1930) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.View.dispatchPointerEvent(View.java:5759) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2970) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2529) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:869) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2538) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.os.Handler.dispatchMessage(Handler.java:99) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.os.Looper.loop(Looper.java:154) 11-18 13:45:09.741: E/AndroidRuntime(7946): at android.app.ActivityThread.main(ActivityThread.java:4945) 11-18 13:45:09.741: E/AndroidRuntime(7946): at java.lang.reflect.Method.invokeNative(Native Method) 11-18 13:45:09.741: E/AndroidRuntime(7946): at java.lang.reflect.Method.invoke(Method.java:511) 11-18 13:45:09.741: E/AndroidRuntime(7946): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 11-18 13:45:09.741: E/AndroidRuntime(7946): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 11-18 13:45:09.741: E/AndroidRuntime(7946): at dalvik.system.NativeStart.main(Native Method) 
+6
source share
2 answers

It seems that you are initializing the para TextView object with a non-Activity context, which requires setting Intent.FLAG_ACTIVITY_NEW_TASK to the Intent that triggers the Activity.

this will solve the problem

TextView para = new TextView(this); this refers to the Activity context

+10
source

If you are inflating a TextView from XML , be sure to inflate the layout containing the TextView using getActivity (). getLayoutInflater (). It decided for me.

+10
source

All Articles