2017-12-11 1 views
0

この質問には多くの回答がありますが、私はそれを働かせるようです。 TextViewsとImageViewsで構成されるカスタム項目を持つListViewがあります。ListViewの項目のTextViewでクリック可能なリンクを作成する

XMLフィードでデータを受信しました。

私はAndroidの6によ
private static Spanned fromHtml(String html){ 
    Spanned result; 
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
     result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY); 
    } else { 
     result = Html.fromHtml(html); 
    } 
    return result; 
} 

はので、私は「それ以外」で終わる:私はこの方法を持っている私のアダプタで

<![CDATA[ <p>My text <a href="http://myhost.com/link/to/fM" target="_blank">click here</a>.</p> ]]> 

:要素の一つは次のようにHTMLが含まれています。

"holder"クラスを使用して、ListViewアイテムに必要なすべてのTextViewとImageViewを定義します。私は

fromHtml(s) 

だけのsetText(複数可)を省略した場合

String s = fromHtml(xmlItem.Description).toString(); 
myHolder.description.setText(fromHtml(s)); 

:私はこのような移入

view.setTag(myHolder); 

、問題のTextViewの:ホルダーインスタンスは、次のように割り当てられています私のCDATAからすべてのタグを取得する

私は実際には、ここをクリックしてcliとしてレンダリングしたいckable link ...

私は間違っていますか?

答えて

0

あなたの問題はここにある:

String s = fromHtml(xmlItem.Description).toString(); 

setText()方法はCharSequenceメソッドを実装して何かを受け入れます。ほとんどの人は通常Stringのインスタンスを渡しますが、それはStringCharSequenceを実装して以来完全に正常です。しかし、文字列は、リンクを処理するために必要な情報が含まれていないので、あなたは、この代わりにその行を変更する必要があります。

Spanned s = fromHtml(xmlItem.Description); 

SpannedCharSequenceインターフェイスを実装しているので、あなただけの前のようにsetText()sを渡すことができます。そして今、あなたはハイライトされたリンクを見るでしょう。

しかし、それはすべての解決策ではありません。あなたはTextViewも知っている必要がありますを処理するリンクはfromHtml()が作成されます。これにはsetMovementMethod()コールを使用します。あなただけ(あなたが新しいビューを作成しているので、あなたのconvertViewがnullのときなど)一度にこれをコールする必要がありますが、あなたにも、この行を追加する必要があります:それは作品

myHolder.description.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

を!アドバイスに続いて、CDATAの開始タグと終了タグも手動で取り除いてください。それはそれをした!感謝万円! – CJe

+0

ちょうどアイテムのクリックイベントが私のlistViewアイテムで発生しなくなったことが発見されました: - /それに対する解決策? – CJe

+0

@CJeだから、ユーザーがリンクをクリックしたときに1つのことが起こるようにしたい。そして、あなたはビュー上で 'OnClickListener'を使っているのですか、リスト上の' OnItemClickListener'を使っていますか? –

関連する問題