Reputation: 32243
I'm making a custom ImageView
. One of the methods is to load an image from a URL. And I want to retrieve the Bitmap in a Thread and load the bitmap in the UI thread.
How can I make a runOnUIThread()
call for painting the bitmap?
Is there some kind of built in function? Or should I create a Handler
in the constructor and use it for running runnables in the UI thread?
Upvotes: 20
Views: 12268
Reputation: 26831
You can do something like this:
new Thread(new Runnable() {
public void run() {
final Bitmap bm = getBitmapFromURL(myStation.getStation().imageURL);
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
icon.setImageBitmap(bm);
}
});
}
}).start();
This will work outside of an activity, like in a ListAdapter.
Upvotes: 7
Reputation: 11050
Create a class that extends from AsyncTask. Pass the ImageView in the constructor. In the doInBackground method, download the image. In the postExecute method, set the image to the ImageView.
Upvotes: 2
Reputation: 68187
Download the Image via AsyncTask
and set to your view in its onPostExecute method
OR
From a separate image downloading thread use the post method of View
which will always run its Runnable
on UI-thread:
yourImageView.post(new Runnable() {
@Override
public void run() {
// set the downloaded image here
}
});
Upvotes: 56