Addev
Addev

Reputation: 32243

runOnUiThread inside a View

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

Answers (3)

IgorGanapolsky
IgorGanapolsky

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

Charlie-Blake
Charlie-Blake

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

waqaslam
waqaslam

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

Related Questions