بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

نمایش متن Html با استفاده ازTextView درون ListView

مدیریت گفتگو
AhmadVB 11 سال پیش
آخرین تغییر: 11 سال پیش

سلام

من یک 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?

نظرات

AhmadVB 11 سال پیش
ممنون ولی دقیقا در پاسخ زیر نیز نوشته ام که من intent ای ندارم که دستی آن را صدا بزنم. این را هم قبلا خودم دیده بودم.
ایوب شمسی 11 سال پیش
شرمنده که هر چی سرچ کردم چیزی غیر از پاسخ خودتون یافت نکردم یافت نکردم و اینکه خودمم نتونستم حلش کنم

پاسخ‌ها 2

AhmadVB 11 سال پیش

من توی اینترنت زیاد گشتم. جوابی که دیگران داده بودند این بود که به جای

 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);

به هر حال هنوز مشکل من حل نشده...

نظرات

AhmadVB 11 سال پیش

همانطور که در پاسخ قبلی ام نوشته بودم 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)

و مشکل باز هم همچنان پابرجاست !

نظرات

Spirit 11 سال پیش
مشکل جدیدتون مربوط میشه به اون لینکتون ، نمیتونه یه میزبان برا ارجاعش پیدا کنه
AhmadVB 11 سال پیش
ممنون ، حق با شماست. لینک های من اولش http نداشت. مشکل حل شد.

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .