2012-04-26 1 views
1

私は、指定されたURLからダウンロードしたイメージを含むいくつかのダウンロードされた情報をリストに埋め込むウィジェットを持っています。Android - ウィジェットダウンロードしたリソースからのRemoteView setImageViewBitmap

URLから作成したビットマップを使ってsetImageViewBitmapを使用してこの画像を表示したいとします。私は正常にビットマップを作成することができますが、私は問題に直面:私が使用している場合

を:

itmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(item.getPosterUrl()).getContent()); 
remoteViews.setImageViewBitmap(R.list_item.poster, bitmap); 

イメージが正常にウィジェット一覧に表示され、しかし、ダウンロードは一種の遅い(とこの一般的ですすべてのネットワーク操作で行う必要があります)ので、ユーザーがリストの残りの部分を見ることができる間、スレッドを使用してバックグラウンドでダウンロードを実行したかったのです。

私の問題は、私がスレッドを使うと、ダウンロードはうまくいっても、remoteViewsはイメージを更新していないということです。同じ結果を持つHandlerも試しました。

多分私はrunOnUIThreadとして何かが必要ですが、私はウィジェットのための同様のメソッドを見つけませんでした。

どうすればよいですか?

ありがとうございます。

答えて

3

ステップ1:画像をダウンロードしてください。

ステップ#2:RemoteViews経由でダウンロードが完了したら、そのイメージを使用して、アプリウィジェットを更新し、ビットを明確にするためにAppWidgetManager

UPDATE

、あなたは確実にダウンロードすることはできません。 AppWidgetProvider - onUpdate()の何かが直接メインアプリケーションスレッドで呼び出されるため、ダウンロードに時間がかかりすぎる可能性があります。

ただし、onUpdate()は、画像をダウンロードしてアプリウィジェット自体を更新するIntentServiceにその作業を委任することができます。 AppWidgetProviderの場所ですが、アプリの他のコードでもアプリウィジェットを更新できます。 IntentServiceRemoteViewsを作成し、AppWidgetManagerを取得して更新してください。

+0

もし私が複数のremoteviewsを基本的に写真付きの連絡先のリストを更新したいのであれば、どうすればいいのですか?私は上記の方法を試しましたが、常に最初のビューを更新します。手伝っていただけませんか?例:私のウィジェットには5つの連絡先が表示されています。私は毎回各写真を読み込み、毎回appwidgetmgr.updateを呼び出しました。常に最初の項目を更新します。 – Meher

+0

@meher:これは元の質問または私の答えに直接関係していません。質問の右上にあるAsk Questionボタンから新しい質問をしてください。 – CommonsWare

関連する問題