2011-02-03 10 views
2

私は、HTMLページを受け取り、それらを解析して画面に表示するアプリケーションを作成しています。具体的には、このアプリケーションはメッセージボードからHTMLを取り出し、ユーザーが投稿した投稿を一覧表示します。非同期Html.ImageTextViewで複数の画像を設定するための画像

投稿のコンテンツの多くは<img>タグの画像であるため、画像のダウンロードを処理するにはHtml.ImageGetterと書く必要があります。

textView.setText()方法は次のようになります。

myTextView.setText(Html.fromHtml(myText, new ImageGetter() {     
     @Override 
     public Drawable getDrawable(String source) { 
     Drawable d; 

     // Need to async download image here 

     return d; 
     } 
    }, null)); 

こうする同期簡単ですが、それは私のUIスレッドをロックしないように非同期にこれを実行するための推奨方法はありますか?私は最終的にこれらのイメージのキャッシングを構築したいと思っていますが、非同期ダウンロードがそこにあったらかなり簡単だろうと思います。

答えて

2

これを同期的に行うのは簡単ですが、UIスレッドをロックしないようにこれを非同期的に行う方法がありますか?

これは難しく、おそらく不可能です。すぐに何かを返さなければなりません。それがプレースホルダであっても、ダウンロードが完了したらプレースホルダを置き換える方法があります。 ImageViewの場合はImageView)画像へのアクセスが不足しているため、プレースホルダをどのように置き換えるかわかりません。

+0

私はあなたが何を意味するかを見ます。そこに散らばってタグでHTMLを表示する別の方法がありますか?私はWebViewの使用について少しは読んだことがありますが、実際には多くのWebViewをListViewに行として配置する必要はありませんでした。他の提案は高く評価されています:) – thedude19

+0

@ thedude19: 'ListView'の' WebView'はスクロールすると問題になるかもしれません。しかし同時に、 'Html。 'の' 'もサポートしています。fromHtml() 'は、ローカルアセット(例えば、絵文字を同等のアイコンに変換する)を対象としているようです。さらに、本当に長いかもしれないという理由だけで、あなたが完全なメッセージボードのエントリを 'ListView'に入れたいと思っているのは本当に懐疑的です。 ListViewの最初の3-4行をプレーンテキストのみで表示し、 'ListView'エントリをクリックすると' WebView'でフル投稿を表示することをお勧めします。 – CommonsWare

+0

@CommonsWare:応答する時間をとってくれてありがとう。私はこれをすべて前進させながら検討します。 – thedude19

1

AsyncTaskまたはThread/Handlerのいずれかの組み合わせを使用します。

+0

私はOPがAsyncTaskらに精通している、としてこれを行う方法を具体的に求めていることを前提としてい'ListView'の中の' ImageGetter.getDrawable() 'です。私の関連[質問](http://stackoverflow.com/q/11712130/403455)を参照してください。 –

0

HTMLを表示する前に、見えないHtml.fromHtmlを使用してすべてのURLを抽出し、それらのURLをリストに入れ、すべての画像を非同期にダウンロードし、メモリキャッシュに保存してからImageGetterを実装してurlをキーとし、drawableを値として使用するキャッシュルックアップ。非同期的にイメージをダウンロードし、ミニライブラリーがここにありますメモリキャッシュに格納するための

+0

この提案では、リストビューを表示する前にリスト全体をダウンロードしてキャッシュする必要はありませんか?もしそうなら、私はこれを同期的に行うよりも優れているとは思わない。 –

関連する問題