2013-03-08 55 views
0

我已經編碼在gridview中顯示幾個圖像。圖像從網址顯示。 我面臨的問題是,當我滾動圖像被替換..和圖像的順序不斷改變一旦開始..這導致延遲顯示全圖像,如果我點擊任何圖像在網格.. 請幫幫我 !在gridview中的圖像被滾動替換

代碼:

public class ImageAdapter extends BaseAdapter { 

    private Context mContext; 
    private TextView txtUrl; 
    private String response; 
    public ImageView imageView; 
    public static String[] mThumbIds; 
    public ImageAdapter(Context c,String resp) { 
     mContext = c; 
     response = resp.trim(); 
     mThumbIds = resp.split(","); 
    } 

    public int getCount() { 
     return mThumbIds.length; 
    } 

    public Object getItem(int position) { 
     return null; 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(95, 95)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(6, 6, 6, 6); 
     } else { 
      imageView = (ImageView) convertView; 
     } 


     try { 
      new LoadImageGrid(imageView).execute(mThumbIds[position]); 

     } catch(Exception e) { 
      txtUrl.setText("Error: Exception"); 
     } 

     return imageView; 

    } 



class LoadImageGrid extends AsyncTask<String, Void, Drawable> 
{ 

    ImageView imageView; 
    public LoadImageGrid(ImageView im){ 
     imageView = im; 
    } 
    @Override 
    protected Drawable doInBackground(String... args) { 
     String url = args[0]; 
     Drawable d = null; 
     try { 
      d = Drawable.createFromStream((InputStream) new URL(url).getContent(), "src"); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return d; 

    } 


    @Override 
    protected void onPostExecute(Drawable d) { 
     imageView.setImageDrawable(d); 
    } 
+0

它會發生像你需要緩存的圖像。嘗試使用Android的任何圖像下載庫,如通用圖像下載,一個你會發現懶惰列表 – Pragnani 2013-03-08 16:31:15

回答

0

這似乎轉換視圖是相關的。當您使用convert view重用圖像空間時,應該在該範圍內使用Imageview。我會建議通過它的id在你當前的類代碼中找到imageview,然後再進行修改。

+0

沒有得到你正確..我是新的android開發:/ 你可以通過顯示一些代碼描述 – 2013-03-08 17:06:01

1

當您滾動網格視圖時,不可見的圖像視圖會以convertView參數的形式返回getView()。但是,您的asyncTask不會停止,並致電

imageView.setImageDrawable(d); 

導致將下載的圖像應用到錯誤位置的視圖。因爲現在您可以重複使用相同的imageView。快速修復不是使用convertView。但它會減慢你的應用程序的速度。

+0

你可以請告訴我任何應用程序不會變慢的方式,因爲將來我會增加網格中顯示的圖像數量。 以及如何在不使用convertview的情況下執行此操作? – 2013-03-08 17:08:58

+0

我不認爲,性能會顯着下降。您不使用複雜的佈局,創建單個ImageView的速度非常快。順便說一句,每次加載圖像時,它出現在屏幕上是一種不好的做法。你應該緩存下載的圖像。這裏是一個相關的線程:http://stackoverflow.com/questions/541966/how-do-i-do-a-lazy-load-of-images-in-listview。 – 2013-03-08 19:19:30

+0

不,我不想緩存圖像。你能告訴我,我應該在現有的代碼中做出什麼改變,以便我可以擺脫這個問題..如何做到這一點,而不使用covertview? – 2013-03-09 12:54:04

相關問題