2012-05-30 70 views
0

有以下asynctask,我正在使用下载一些图像。除了第一个图像以外,它可以很好地工作,除非我做了像移动到下一个图像然后再回来的东西,这并不总是出现。imageview绘制问题与asynctask

public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    static ImageView _imageView=null; 

    public DownloadImageTask(ImageView ctl){ 
     _imageView=ctl; 
    } 

    protected void onPostExecute(Bitmap result) { 
     _imageView.setImageBitmap(result); 
    } 
    ... 
} 

我认为这可能与在后台线程更新UI的问题,所以我重新设计这个使用调用调用.setImageBitmap(UI线程上的方法的抽象类),但我仍然得到相同的行为 - 对除第一个图像以外的所有图像都适用,除非我移动到下一张图像并再次返回。

有没有办法在我设置图像后强制对imageview进行重绘?

+0

不应该是一个问题围绕后台线程调用,因为onPostExecute应该在UI线程中执行。在Activity生命周期中,你从哪里调用AsyncTask? – kabuko

回答

0

我也有类似的问题,我在我的Activity.onCreate()做的是这样的:

ListView listView = (ListView) findViewById(R.id.myListView); 
adapter = new MyArrayAdapter(this, myArray, ...); 
listView.setAdapter(adapter); 
if (myArray.size() > 0) 
{ 
    // Fake a click on the first item 
    onItemClick(listView, myArray, 0, 0); 
} 

然后,onItemClick()做什么才能找到ImageView当前行。当然,没有看到你的代码,以上只是一个疯狂的猜测...

+0

在当前版本中,我的活动使用抽象方法扩展了一个类:setImageBitmap(),它由AsyncTask任务调用。 public class MyActivity extends DownloadImageActivity { @Override public void onStart(){ super.onStart(); \t ... new DownloadImageTask(MyActivity.this).execute(s); } public void setImageBitmap(Bitmap bitmap){ \t ImageView img =(ImageView)findViewById(R.id.img1); \t img.setImageBitmap(bitmap); } } – alexb