2017-06-01 74 views
0

這個問題以前已經問過,但我找不到答案,所以很抱歉,如果它是一個重複的問題。但我的gridView只是重複我傳遞給它的最後一張圖片。GridView重複一個圖像

這裏是我的onActivityResult這裏我選擇了從手機畫廊

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == RESULT_OK) 
    { 
     if(requestCode == PICK_IMAGE_MULTIPLE) 
     { 
      ArrayList<Bitmap> items = new ArrayList<Bitmap>(); 
      String[] imagesPath = data.getStringExtra("data").split("\\|"); 

      try 
      { 
       lnrImages.removeAllViews(); 
      } 
      catch (Throwable e) 
      { 
       e.printStackTrace(); 
      } 

      for (int i=0; i<imagesPath.length; i++) 
      { 
       yourbitmap = BitmapFactory.decodeFile(imagesPath[i]); 
       items.add(yourbitmap); 
      } 

      adapter = new ImageAdapter(this, R.id.grdImages, items); 
      gridView.setAdapter(adapter); 
     } 
    } 
} 

這裏六張圖片是我imageadapter

public class ImageAdapter extends ArrayAdapter<Bitmap> 
{ 
Bitmap bm; 
private Context context; 
private ArrayList<Bitmap> items; 

public ImageAdapter(Context context, int textViewResourceId, ArrayList<Bitmap> items) { 
    super(context, textViewResourceId, items); 
    this.context = context; 
    this.items = items; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 

    ImageView imageView; 

    if (convertView == null) 
    { 
     imageView = new ImageView(context); 
     imageView.setLayoutParams(new GridView.LayoutParams(185, 185)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageView.setPadding(5, 5, 5, 5); 
    } 
    else 
    { 
     imageView = (ImageView) convertView; 
    } 

    for (int i = 0; i < items.size(); i++) 
    { 
     bm = items.get(i); 
     imageView.setImageBitmap(bm); 
     return imageView; 
    } 

    return imageView; 

} 
} 

感謝您的反饋是大加讚賞,作爲一個程序員在培訓中。

+0

任何人想什麼? – Shawnzey

+0

最後一個循環的用途是什麼?爲什麼要多次調用'imageView.setImageBitmap'。 – cole

+0

yea mike_d_boss只是指出了我,我thougth我不得不循環所有圖像通過 – Shawnzey

回答

1

刪除此塊...

for (int i = 0; i < items.size(); i++) { 
    bm = items.get(i); 
    imageView.setImageBitmap(bm); 
    return imageView; 
    } 

並添加此

imageView.setImageBitmap(items.get(position)); 
+0

這是什麼和我有什麼區別? – Shawnzey

+0

引用變量.. – 2017-06-01 03:13:21

+0

沒有同樣的事情發生 – Shawnzey

0

當你調用getView方法,您不使用循環〜」

記住ListView和GridView需要一個數據源,無論你想更改listView/gridView的東西,你都要更改數據源。

在getView方法

你只是這樣做

@Override 

公共查看getView(INT位置,查看convertView,ViewGroup以及母公司) {

ImageView imageView; 

if (convertView == null) { 
    ..... 
} 
else{ 
    ..... 
    imageView.setImageBitMap(items.get(position)); 
    //items is the data sources and position is the method gave you . 
} 

!!! no for loop 

return imageView;