2017-08-07 88 views
0

我使用表格視圖,以顯示我已存儲的圖像,但我向下滾動的圖像在圖像視圖中消失,並且不加載again.I也使用線程將圖像加載到圖像視圖中。 這裏是我的代碼(也這些代碼都在我的網格視圖適配器類):圖像消失,因爲我滾動

 @Override 
     public View getView(final int position, View convertView, ViewGroup parent) { 
      Log.e("sara" , "this part takes time"); 


      LayoutInflater inflater = getLayoutInflater(); 


      convertView = getLayoutInflater().inflate(R.layout.gallery_gridsq, parent, false); 
      iv = (ImageView) convertView.findViewById(R.id.icon); 
      file = new File(Uri.parse(getItem(position).toString()).getPath()); 
      new myTask(iv, file).execute(); 

      return convertView; 
     } 


     private class myTask extends AsyncTask <Void , Void ,Bitmap> { 
      ImageView iv; 
      File file; 

      public myTask(ImageView iv, File file) { 
       this.iv=iv; 
       this.file= file; 
      } 



      @Override 
      protected Bitmap doInBackground(Void... params) { 

       BitmapFactory.Options options = new BitmapFactory.Options(); 
       options.inJustDecodeBounds = true; 

       options.inJustDecodeBounds = false; 
       options.inSampleSize = 8; 
       try { 
        bmp = BitmapFactory.decodeStream(new FileInputStream(file), null, options); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } 
       return bmp; 
      } 


      @Override 
      protected void onPostExecute(Bitmap aVoid) { 

       iv.setImageBitmap(aVoid); 

      } 

     } 

回答

0

我能想到的是給我造成了類似的麻煩內存問題。

檢查時,你和你的日誌向下滾動你的getView仍稱:Log.e("sara" , "this part takes time");

如果該行是當你向下滾動叫,檢查在android工作室提供的Android監視內存。

點擊底部的android monitor>monitors>並觀察內存是否達到上限(可能是128或256MB)。

如果是的話您有內存問題。可能的原因是,您沒有重新使用該列表並且內存正在堆疊。在內存的高峯期,圖像將不會被加載。

應該的方式,你已經加載的圖片,你向下滾動,並加載新的圖像被刪除來實現。

而且,嘗試使用glide它具有比bitmapfactory許多領域內存問題,一般較好的一個好辦法。