2012-05-30 97 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