1

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

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" />
4

3 回答 3

2

在您的方法上getView(...),像这样膨胀您的视图:

 LayoutInflater.from(YOUR_ACTIVITY_INSTANCE).inflate(R.layout.layout_with_text_view_autolink, parent, false);
于 2015-01-07T16:34:36.140 回答
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() 返回 activty 实例,

LayoutInflater.from(activityInstance).inflate(R.layout.xxx,null); 或新视图(活动实例)..

于 2014-11-27T08:26:03.093 回答
0

如果您来自从 BaseAdapter 扩展的类,这里的解决方案

来自 MainActivity 类:

mLeDeviceListAdapter = new LeDeviceListAdapter(MainActivity.this);

从 LeDeviceListAdapter 类扩展 BaseAdapter

LeDeviceListAdapter(Activity activity) {
        beacons = new ArrayList<>();
        mInflator = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
于 2016-11-09T06:44:07.047 回答