2014-10-30 59 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); 
} 
相關問題