2014-10-30 45 views
1

我有一个应用程序小部件,其中包含TextView。我将其android:autoLink属性设置为“web”,以便可以单击链接以在浏览器中启动它们。 链接变成可点击的,但是当我点击它们时,在打开浏览器活动时抛出异常。Android TextView自动链接应用程序中的小部件

10-31 01:27:56.155: E/Nova.AppWidget(9427): com.capturekenya/.CaptureWidgetProvider v1.0 (1): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
10-31 01:27:56.155: E/Nova.AppWidget(9427):  at android.app.ContextImpl.startActivity(ContextImpl.java:1026) 
10-31 01:27:56.155: E/Nova.AppWidget(9427):  at android.app.ContextImpl.startActivity(ContextImpl.java:1013) 
10-31 01:27:56.155: E/Nova.AppWidget(9427):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:284) 
10-31 01:27:56.155: E/Nova.AppWidget(9427):  at android.text.style.URLSpan.onClick(URLSpan.java:64) 
10-31 01:27:56.155: E/Nova.AppWidget(9427):  at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:212) 

这是插件的TextView的

<TextView 
android:id="@+id/notification_textView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_below="@+id/calendar_textView" 
android:layout_marginTop="8dp" 
android:autoLink="web" 
android:ellipsize="end" 
android:gravity="center" 
android:text="@string/notification" 
android:textColor="@color/white" 
android:textSize="12dp" /> 
+0

请添加您的代码,并查看它是否与此https://coderwall.com/p/cg_efa?i=1&p=1&q=author%3Aldurazo&t%5B%5D=ldurazo – 2014-10-30 23:38:18

+0

如果您创建一个小部件并有一个TextView与android:autoLink =“web”然后将文本设置为URL的链接将被着色,但如果用户点击URL,你会得到异常android.util.AndroidRuntimeException:调用startActivity()从活动上下文的外部需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗? – 2014-10-31 09:09:13

+0

我的意思是更多的代码,textview在哪里?通过适配器?活动之外? – 2014-10-31 13:56:41

回答

1

好,从URLSpan的onClick这个问题,结果

Uri uri = Uri.parse(getURL()); 
    Context context = widget.getContext(); 
    Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
    intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); 
    context.startActivity(intent); 

如果widget.getContext()是不活动的实例,意图必须添加FLAG_ACTIVITY_NEW_TASK标志;我们不能在这里添加代码,所以我们将使widget.getContext()返回活动实例,

LayoutInflater.from(activityInstance).inflate(R.layout.xxx,null);或新的视图(activityInstance)..

2

在你的方法getView(...)夸大你这样的观点:

LayoutInflater.from(YOUR_ACTIVITY_INSTANCE).inflate(R.layout.layout_with_text_view_autolink, parent, false); 
+0

这对我有效:您应该在构造函数中传递活动并保存... – xnagyg 2015-05-12 16:33:20

+0

无需更改getView,只需将活动作为上下文传递给窗口小部件 – Georges 2015-12-02 05:39:18

0

这里的情况下,解你是从BaseAdapter

扩展从类MainActivity类:

mLeDeviceListAdapter = new LeDeviceListAdapter(MainActivity.this); 

从类LeDeviceListAdapter延伸BaseAdapter

LeDeviceListAdapter(Activity activity) { 
     beacons = new ArrayList<>(); 
     mInflator = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
相关问题