2016-04-19 8 views
0

Ich habe eine Rasteransicht mit 6 Zellen im Adapter geladen. Wenn ich auf jede Zelle klicke, werde ich ein Bild hinzufügen, entweder indem ich Fotos mache oder Bilder aus der Galerie wähle. Nach der Auswahl der Bilder wird in der Rasteransicht nur noch die leere Seite angezeigt. obwohl ich Bild in einer Zelle setze, wenn ich für eine andere Zelle gehe, ist die vorherige Auswahl weg. wie man es macht? .. bitte hilf mir. Wenn ich etwas falsch mache, bitte führe mich.Benutzerdefinierte Adapter aktualisieren in gridview android

if (convertView == null) { 
     grid = new View(mContext); 
     grid = inflater.inflate(R.layout.fpc_document_view, null); 
     TextView textView = (TextView) grid.findViewById(R.id.grid_text); 
     imageView = (ImageView) grid.findViewById(R.id.grid_image); 
     if (fileList.size() == 0) { 
      textView.setText(DOCUMENT_NAME_LIST[position].toString()); 
      for (int i = 0; i <= 6; i++) { 
       imageView.setImageResource(R.mipmap.ic_add_document); 
      } 
     } else { 

      Bitmap bitmapResized = null; 
      for (int i = 0; i < fileList.size(); i++) { 
       if (!fileList.get(i).equals("")) { 
        System.out.println("fileList here ,,,," + fileList.get(i).toString()); 
        Drawable drawable = mContext.getResources().getDrawable(R.mipmap.ic_add_document); 
        bitmapResized = ((BitmapDrawable) drawable).getBitmap(); 
       } else { 
        Uri selectedImageUri = Uri.fromFile(fileList.get(i)); 
        bitmapResized = ImageRelatedStuff.convertURIToBitmap(selectedImageUri, mContext); 

        if (bitmapResized != null) { 
         Bitmap bitmapTemp = bitmapResized; 
         bitmapResized = null; 
         bitmapResized = ImageRelatedStuff.getResizedBitmap(bitmapTemp, 500, 500, 0); 
        } 
       } 
       imageView.setImageBitmap(ImageRelatedStuff.getRoundedCornerBitmap(bitmapResized, 15)); 
      } 
     } 
    } else { 
     grid = convertView; 
     imageView = (ImageView) grid.findViewById(R.id.grid_image); 

    } 

Antwort

0
public class MyAdapter extends BaseAdapter{ 

private final int GRID_COUNT = 6; 

// you need an array save bitmap with position 
Bitmap[] bitmapArray; 

public MyAdapter(){ 
    bitmapArray = new Bitmap[GRID_COUNT]; 
} 

@Override 
public int getCount() { 
    return 6; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null){ 
     // inflater your layout 
    } 
    ImageView imageView = (ImageView) convertView.findViewById(R.id.grid_image); 
    // get the bitmap in array by position 
    Bitmap bitmap = bitmapArray[position]; 
    // when bitmap is null ,show default picture 
    if (bitmap == null){ 
     imageView.setBackgroundResource(R.drawable.ic_default); 
    }else{ 
     imageView.setImageBitmap(bitmap); 
    } 
    return convertView; 
} 

// activity or fragment use this method call adapter refresh 
public void setBitmap(int position, Bitmap bitmap){ 
    bitmapArray[position] = bitmap; 
    notifyDataSetChanged(); 
} 
} 

Update meine Antwort, Sie Hoffnung Hilfe Code

+0

kein glück ... das gleiche ergebnis wieder .. kann pls sagen mir, was ist das problem hier? .. in meiner getcount-methode, rückgabewert ist immer 6. aber filesize ist 1, wenn ich ein bild aus der galerie gewählt .. dann y es ist immer 6-mal Schleife obwohl Dateigröße ist 1. – saravanan

+0

@saravanan die Methode getCount() sollte fileList.size() zurückgeben, tun Sie das? Wenn sich die Anzahl der Dateilisten geändert hat, müssen Sie adapter.notifyDataSetChanged() – HelloBird

+0

s aufrufen. aber zuerst sollte ich leere Bild 6 Symbole auf jeder 6 Zellen zeigen. Ich muss auf jede Zelle klicken, um ein Bild zu setzen. Wenn ich filelist.size() setze, wird es zum ersten Mal nur 1 Zelle anzeigen, zum 2. Mal werden nur 2 Zellen angezeigt ... so weiter. wie man alle 6 Ikonen visble macht und auch ich könnte Bilder zu jeder Zelle hinzufügen? .. können Sie mich? .. pls helfen mir .. – saravanan

2

ändern wie folgt aus:

if (convertView == null) { 
    grid = new View(mContext); 
    grid = inflater.inflate(R.layout.fpc_document_view, null); 
    TextView textView = (TextView) grid.findViewById(R.id.grid_text); 
    imageView = (ImageView) grid.findViewById(R.id.grid_image); 
} else { 
    grid = convertView; 
    imageView = (ImageView) grid.findViewById(R.id.grid_image); 

} 
if (fileList.size() == 0) { 
     textView.setText(DOCUMENT_NAME_LIST[position].toString()); 
     for (int i = 0; i <= 6; i++) { 
      imageView.setImageResource(R.mipmap.ic_add_document); 
     } 
    } else { 

     Bitmap bitmapResized = null; 
     for (int i = 0; i < fileList.size(); i++) { 
      if (!fileList.get(i).equals("")) { 
       System.out.println("fileList here ,,,," + fileList.get(i).toString()); 
       Drawable drawable = mContext.getResources().getDrawable(R.mipmap.ic_add_document); 
       bitmapResized = ((BitmapDrawable) drawable).getBitmap(); 
      } else { 
       Uri selectedImageUri = Uri.fromFile(fileList.get(i)); 
       bitmapResized = ImageRelatedStuff.convertURIToBitmap(selectedImageUri, mContext); 

       if (bitmapResized != null) { 
        Bitmap bitmapTemp = bitmapResized; 
        bitmapResized = null; 
        bitmapResized = ImageRelatedStuff.getResizedBitmap(bitmapTemp, 500, 500, 0); 
       } 
      } 
      imageView.setImageBitmap(ImageRelatedStuff.getRoundedCornerBitmap(bitmapResized, 15)); 
     } 
    } 

Problem ist, wenn Ihr convertView ist gleich nicht null Sie nichts Bild setzen auf Bildansicht. Aus diesem Grund erhalten Sie in der zweiten Zelle, in der convertView null ist, ein Bild, während Sie in einer vorherigen Zelle, die nicht null ist, nichts erhalten.

+0

@ ramesh..danke für die Antwort ... ich werde es überprüfen .. – saravanan

+0

Es ist noch nicht gelöst @ Ramesh. Wenn ich ein Bild von SD-Karte wähle, zeigen alle 6 Zellen nur das gleiche Bild. aber mein Ergebnis ist eine bestimmte Zelle hinzugefügt werden, dass Bilder und so weiter .. – saravanan