开发者

Android AsyncTask Listview problem

I have the below code in my getView. It populates an imageview with an image and it works but not without problems. Problem being that I don't see the image until I click something on the screen. Also if I have more than one image in the listview clicking something on screen will make the images shift around.

                    class Thumbnailer extends AsyncTask<S开发者_开发百科tring, Void, Bitmap> {

                        @Override
                        protected void onPostExecute(Bitmap result) {
                            image_main.setImageBitmap(result);
                            image_main.setVisibility(View.VISIBLE);
                            image_table.setVisibility(View.VISIBLE);
                        }
                        @Override
                         protected void onProgressUpdate(Void... progress) {
                         }

                        @Override
                        protected Bitmap doInBackground(String... params) {
                             BitmapFactory.Options o = new BitmapFactory.Options();
                             o.inJustDecodeBounds = true;
                             BitmapFactory.decodeFile(params[0], o);
                             final int REQUIRED_SIZE=70;

                             //Find the correct scale value. It should be the power of 2.
                             int width_tmp=o.outWidth, height_tmp=o.outHeight;
                             int scale=1;
                             while(true){
                                 if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                                     break;
                                 width_tmp/=2;
                                 height_tmp/=2;
                                 scale++;
                             }
                             //Decode with inSampleSize
                             BitmapFactory.Options o2 = new BitmapFactory.Options();
                             o2.inSampleSize=scale;                                  
                             return BitmapFactory.decodeFile(params[0], o2);
                        }
                    } 
                    new Thumbnailer().execute(image);


i think that you cannot do any operation inside an AsyncTask subclass with any view that are attached to the ui, i think the best is to pass a handler to the Thumbnailer class via constructor and dispatch a message for update the image view on the ui thread. on the onPostExecute dispatch a message with the decoded bitmap within message.obj and set the ImageView bitmap on the handleMessage method.


As I wrote in your previous question: near as I can tell, you are attempting to load every image into a single ImageView widget, which seems unlikely. You need to pass into the AsyncTask the ImageView for the row you are processing with this particular task.

How do I pass a View to Thumbnailer?

Supply it in the constructor, as Mr. Knego suggested.


Try passing a View to your Thumbnailer via a constructor, and then call view.invalidate() as last line in onPostExecute. This should force View to redraw itself.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜