2014-10-30 2 views
1

TextView 인 앱 위젯이 있습니다. 나는 안드로이드 : 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 
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 –

+0

위젯을 만들고 android : autoLink = "web"로 TextView를 가지고 텍스트를 URL로 설정하면 링크가 착색되지만 사용자가 URL을 클릭하면 예외가 발생합니다 android.util.AndroidRuntimeException : startActivity() 호출 Activity 컨텍스트 외부에서 FLAG_ACTIVITY_NEW_TASK 플래그가 필요합니다. 이게 니가 원하는거야? –

+0

나는 더 많은 코드를 의미했는데, textview는 어디에 있습니까? 어댑터를 통해? 활동 외부? –

답변

1

아니라 URLSpan 온 클릭부터이 문제의 결과

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); 또는 새로운보기 (activityInstance) ..

2

당신의 방법에서이 같은보기를 부풀려 getView(...) :

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

이것은 나를 위해 일했습니다 : 생성자에서 액티비티를 전달하고 저장해야합니다 ... – xnagyg

+0

getView를 변경할 필요가 없습니다. 위젯에 컨텍스트로 액티비티를 전달하면됩니다. – Georges

0

당신이 클래스 MainActivity에서 BaseAdapter

에서 확장하는 클래스에서있는 경우에 솔루션 : 클래스 LeDeviceListAdapter에서

mLeDeviceListAdapter = new LeDeviceListAdapter(MainActivity.this); 

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