2016-04-15 12 views
2

Ich zeige und versteckt Checkbox auf Bildansicht Klicken Sie in Gridview, aber wenn ich auf ein Bild klicken Sie das Kontrollkästchen auf mehrere Bild anzeigen Android und wie ich scrollen sichtbar Kontrollkästchen verschwindet, wenn ich scrollen hier ist mein AdapterCheckbox zeigt mehrere Zeit in Rasteransicht Halter Muster

 public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public ImageAdapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 



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

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

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

     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(
         R.layout.galleryitems, parent,false); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
       convertView.setTag(R.id.itemCheckBox, holder.checkbox); 
       convertView.setTag(R.id.thumbImage,holder.imageview); 
       convertView.setTag(holder); 




      } else { 
       holder = (ViewHolder) convertView.getTag(); 
       holder.checkbox = (CheckBox)convertView.getTag(); 
       holder.imageview = (ImageView)convertView.getTag(); 
      } 
      holder.checkbox.setId(position); 
      holder.imageview.setId(position); 
      holder.checkbox.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        CheckBox cb = (CheckBox) v; 
        int id = cb.getId(); 


        if (thumbnailsselection[id]) { 
         cb.setChecked(false); 
         thumbnailsselection[id] = false; 
        } else { 
         cb.setChecked(true); 
         thumbnailsselection[id] = true; 
        } 
       } 
      }); 
      holder.imageview.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        ImageView iv = (ImageView)v; 
        int id = iv.getId(); 
        if (holder.checkbox.getVisibility() == View.GONE) { 

          holder.checkbox.getTag(); 
          holder.imageview.getTag(); 
          holder.imageview.setAlpha(0.22f); 
          holder.checkbox.setVisibility(View.VISIBLE); 
          holder.checkbox.setChecked(true); 


        } else if (holder.checkbox.getVisibility() == View.VISIBLE) { 
         holder.imageview.setAlpha(0.8f); 
         holder.checkbox.setVisibility(View.GONE); 
        } 



       } 
      }); 
      holder.checkbox.setTag(position); 
      holder.imageview.setImageBitmap(thumbnails[position]); 
      holder.checkbox.setChecked(thumbnailsselection[position]); 
      holder.id = position; 
      return convertView; 
     } 
} 

    class ViewHolder { 
     ImageView imageview; 
     CheckBox checkbox; 
     int id; 
    } 
} 
+0

ich diesen Code versucht, nicht außer Kraft setzen zu helfen public int getViewTypeCount() {// TODO Automatisch generierte Methode Stummel if (arrPath! = Null) Rückgabe arrPath.length; sonst Rückgabe 0; } @Override public int getItemViewType (int position) { // TODO Automatisch generierter Methodenstub return 0; } – bambi

+0

nur ein weiteres "Ansicht Halter" Muster Problem? in 99% der Fälle ist die Ansicht des Haltermusters nutzlos und verursacht nur Kopfschmerzen – pskink

Antwort

1

diesen Code versuchen, es für mich gearbeitet,

public class ImageAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 
     private ArrayList<Items> list 
     public ImageAdapter(ArrayList<Items> list) { 
      this.list=list; 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 



     public int getCount() { 
      return list.size(); 
     } 

     public Items getItem(int position) { 
      return list.get(position); 
     } 

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

     public View getView(final int position, View convertView, ViewGroup parent) { 
      final ViewHolder holder; 
      if (convertView == null) { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(
         R.layout.galleryitems, parent,false); 
       holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage); 
      //Take image view in your XML  
       holder.checkbox = (ImageView) convertView.findViewById(R.id.itemCheckBox); 

       convertView.setTag(holder); 




      } else { 
       holder = (ViewHolder) convertView.getTag(); 

      } 

      if(list.get(position).isImageSelected()){ 
       // set your check image 
       holder.checkbox.setImageResource(checkResId); 
      }else{ 
       // set your Uncheck image 
       holder.checkbox.setImageResource(unCheckResId); 
      } 

      holder.checkbox.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 



        if(list.get(position).isImageSelected()){ 
         // set your Uncheck image 
         holder.checkbox.setImageResource(unCheckResId); 
         list.get(position).setIsImageSelected(false); 
        } else { 
         // set your check image 
         holder.checkbox.setImageResource(checkResId); 
         list.get(position).setIsImageSelected(false); 
        } 
        notifyDataSetChanged(); 
       } 
      }); 

      return convertView; 
     } 
} 

    class ViewHolder { 
     ImageView imageview; 
     // Use ImageView for select and deselect 
     ImageView checkbox; 
     int id; 
    } 
} 

public class Items { 



    String thumbImageUrl; 
    boolean isImageSelected; 



    public String getThumbImageUrl() { 
     return thumbImageUrl; 
    } 

    public void setThumbImageUrl(String thumbImageUrl) { 
     this.thumbImageUrl = thumbImageUrl; 
    } 

    public boolean isImageSelected() { 
     return isImageSelected; 
    } 

    public void setIsImageSelected(boolean isImageSelected) { 
     this.isImageSelected = isImageSelected; 
    } 
} 
+0

@bambi willkommen;) Bitte akzeptieren Sie die Antwort. –

0

das ist nicht, wie Sie ViewHolder Kerl verwenden. ViewHolder wird auch wie convertView wiederverwendet, wenn Sie sie als Tag festlegen. Es sollte die Benutzeroberfläche verknüpfen, so dass Sie findViewById nicht erneut aufrufen müssen. Aber ist es Ihre Verantwortung, die Daten zu pflegen (die Position von ImageView, die Sie in Ihrem Fall ausgewählt haben)

siehe this als ein Beispiel.