نمایش متن Html با استفاده ازTextView درون ListView
سلام
من یک TextView دارم که قرار است یک متن html را نشان دهد. البته این TextView درون یک Adapter است که از آن درون یک listView برای نمایش اخبار استفاده می کنم.
txtBody.setText(Html.fromHtml(myHtmlString));
txtBody.setLinksClickable(true);
txtBody.setMovementMethod(LinkMovementMethod.getInstance());
مشکل اینجاست که متن به درستی نشان داده می شود ولی زمانی که روی لینک های درون متن کلیک می شود ForceClose می دهد و logCat هم به این صورت است :
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
من توی اینترنت زیاد گشتم. جوابی که دیگران داده بودند این بود که به جای
CustomAdapter mAdapter = new CustomAdapter( mContext, itemList);
بنویسید :
CustomAdapter mAdapter = new CustomAdapter( this, itemList);
ولی مشکل اینجاست که Constructor ای که توی اموزش های استاد نوشته شده اصلا پارامتر context نمی گیرد. من به هر حال پارامتر context را به کلاس Adapter ام اضافه کردم :
قبلا :
public AdapterNews(ArrayList<StructNews> array) {
super(G.context, R.layout.adapter_news, array);
}
جدید :
public AdapterNews(Context context, ArrayList<StructNews> array) {
super(context, R.layout.adapter_news, array);
}
و درون Activity اصلی نیز آن را این گونه صدا می زنم :
adapter = new AdapterNews(ActivityNews.this, news);
اما باز هم مشکل حل نشد.
جای دیگری نوشته بود این دستور را اضافه کن ، ولی فکر نمی کنم این به درد مشکل من بخورد. چون من دستی یک Activity را صدا نمی کنم که intent ان را داشته باشم بلکه خود TextView است که سعی در باز کردن لینک ها توسط سایر اپلیکیشن ها می کند
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
به هر حال هنوز مشکل من حل نشده...
همانطور که در پاسخ قبلی ام نوشته بودم context را به Adapter ارسال کردم و به جای G.Inflater درون متد getView از یک inflater جدید استفاده کردم به این شکل :
Context context;
public AdapterNews(Activity context, ArrayList<StructNews> array) {
super(context, R.layout.adapter_news, array);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
StructNews item = getItem(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.adapter_news, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
مشکلم تا اندازه ای حل شد. ولی حالا یک مشکل دیگر دارد و هنوز هم برنامه با تاچ کردن یکی از لینک های درون متن موجود در TextView کرش می کند. جالب اینکه این بار در Logcat اسم برنامه من را در خطوط قرمز نشان نمی دهد و خطا را از آندروید می گیرد ! خروجی Logcat به شکل زیر است :
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.View.dispatchPointerEvent(View.java:7426)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.os.MessageQueue.nativePollOnce(Native Method)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.os.MessageQueue.next(MessageQueue.java:125)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.os.Looper.loop(Looper.java:124)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at android.app.ActivityThread.main(ActivityThread.java:5041)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at java.lang.reflect.Method.invokeNative(Native Method)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at java.lang.reflect.Method.invoke(Method.java:511)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
11-01 03:28:42.646: E/MessageQueue-JNI(1525): at dalvik.system.NativeStart.main(Native Method)
11-01 03:28:42.650: E/AndroidRuntime(1525): FATAL EXCEPTION: main
11-01 03:28:42.650: E/AndroidRuntime(1525): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=/motorola (has extras) }
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Activity.startActivityForResult(Activity.java:3370)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Activity.startActivityForResult(Activity.java:3331)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Activity.startActivity(Activity.java:3566)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.app.Activity.startActivity(Activity.java:3534)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.text.style.URLSpan.onClick(URLSpan.java:62)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.text.method.LinkMovementMethod.onTouchEvent(LinkMovementMethod.java:212)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.widget.TextView.onTouchEvent(TextView.java:7536)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.view.View.dispatchTouchEvent(View.java:7246)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
11-01 03:28:42.650: E/AndroidRuntime(1525): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
و مشکل باز هم همچنان پابرجاست !
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .