【问题标题】:Android TextView autoLink in an app widget应用小部件中的 Android TextView 自动链接
【发布时间】:2014-10-30 22:43:13
【问题描述】:

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

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

【问题讨论】:

  • 请添加您的代码,看看是否与此coderwall.com/p/…有关
  • 如果你创建了一个小部件并有一个带有 android:autoLink="web" 的 TextView 然后将文本设置为带有 URL 的内容,链接将被着色但如果用户点击 URL,你会得到异常 android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag。这真的是你想要的吗?
  • 我的意思是更多的代码,文本视图在哪里?通过适配器?在活动之外?

标签: android textview android-appwidget autolink


【解决方案1】:

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

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

【讨论】:

  • 无需更改getView,只需将活动作为上下文传递给小部件
【解决方案2】:

嗯,这个问题来自 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() 不是 activity 的实例,intent 必须添加 FLAG_ACTIVITY_NEW_TASK 标志;我们不能在这里添加代码,所以我们要让 widget.getContext() 返回 activty 实例,

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

【讨论】:

    【解决方案3】:

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

    来自 MainActivity 类:

    mLeDeviceListAdapter = new LeDeviceListAdapter(MainActivity.this);
    

    从 LeDeviceListAdapter 类扩展 BaseAdapter

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

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2012-03-28
      • 2017-11-07
      • 1970-01-01
      相关资源
      最近更新 更多