2016-04-15 14 views
-3

Ich habe bereits die Vorschläge ausprobiert, die es auf dieser Seite gibt und sie funktionieren nicht für mich. Ich werde versuchen, sehr genau zu sein. Ich habe eine benutzerdefinierte Galerie, die Bilder in Gridview anzeigt. Der Benutzer kann mehrere Bilder aus der Rasteransicht auswählen. Sobald die Gridview-Position angeklickt ist, wird das "Tick" -Symbol an dieser Position angezeigt, um den Benutzer zu benachrichtigen, dass das Bild ausgewählt wurde. Das Problem ist, wenn ich ein Bild auswählen und blättern Sie das "Häkchen" -Symbol, das auf dem ausgewählten Bild war, erscheint auf einem anderen Bild. Hier ist der Code.Die überprüfte Gridview-Position ändert sich beim Scrollen

public class CustomPhotoGalleryActivity extends Activity { 

private GridView grdImages; 
private Button btnSelect; 

private ImageAdapter imageAdapter; 
private String[] arrPath; 
private boolean[] thumbnailsselection; 
private int ids[]; 
private int count; 
private Cursor imagecursor = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.custom_gallery); 
    grdImages = (GridView) findViewById(R.id.grdImages); 
    btnSelect = (Button) findViewById(R.id.btnSelect); 
    final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID}; 
    final String orderBy = MediaStore.Images.Media._ID; 
    imagecursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy); 
    int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID); 
    this.count = imagecursor.getCount(); 
    this.arrPath = new String[this.count]; 
    ids = new int[count]; 
    this.thumbnailsselection = new boolean[this.count]; 
    for (int i = 0; i < this.count; i++) { 
     imagecursor.moveToPosition(i); 
     ids[i] = imagecursor.getInt(image_column_index); 
     int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA); 
     arrPath[i] = imagecursor.getString(dataColumnIndex); 

     Log.e("arrPath", "" + arrPath[i]); 
    } 
    imageAdapter = new ImageAdapter(arrPath); 
    grdImages.setAdapter(imageAdapter); 

    btnSelect.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      final int len = thumbnailsselection.length; 
      int cnt = 0; 
      String selectImages = ""; 
      for (int i = 0; i < len; i++) { 
       if (thumbnailsselection[i]) { 
        cnt++; 
        selectImages = selectImages + arrPath[i] + "|"; 
       } 
      } 
      if (cnt == 0) { 
       Toast.makeText(getApplicationContext(), "Please select at least one image", Toast.LENGTH_LONG).show(); 
      } else { 

       Log.d("SelectedImages", selectImages); 
       Intent i = new Intent(); 
       i.putExtra("data", selectImages); 
       setResult(Activity.RESULT_OK, i); 
       finish(); 
      } 
     } 
    }); 
} 
public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private String[] arrPath; 

    public ImageAdapter(String[] arrPath) { 
     this.arrPath = arrPath; 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getViewTypeCount() { 
     return arrPath.length; 
    } 


    public int getCount() { 
     return count; 
    } 

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

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

    public View getView(final int position, View convertView, ViewGroup parent) { 
     View rootView = convertView; 
     final ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      rootView = mInflater.inflate(R.layout.custom_gallery_item, null); 
      holder.imgThumb = (ImageView) rootView.findViewById(R.id.imgThumb); 
      holder.chkImage = (ImageView) rootView.findViewById(R.id.chkImage); 
      rootView.setTag(holder); 
     } else { 
      holder = (ViewHolder) rootView.getTag(); 

     } 
     holder.chkImage.setId(position); 
     holder.imgThumb.setId(position); 
     holder.imgThumb.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       int id = holder.chkImage.getId() 
       if (thumbnailsselection[id]) { 
        holder.chkImage.setVisibility(View.GONE); 
        thumbnailsselection[id] = false; 
       } else { 
        holder.chkImage.setVisibility(View.VISIBLE); 
        thumbnailsselection[id] = true; 
       } 
      } 
     }); 
     Picasso.with(CustomPhotoGalleryActivity.this) 
       .load(new File(arrPath[position])) 
       .resize(150, 150) 
       .centerCrop() 
       .into(holder.imgThumb); 
     return rootView; 
    } 
} 

class ViewHolder { 
    ImageView imgThumb; 
    ImageView chkImage; 
    int id; 
} 
} 

Antwort

1

dies tun es für mich gearbeitet,

public class CustomPhotoGalleryActivity extends Activity { 

private GridView grdImages; 
private Button btnSelect; 

private ImageAdapter imageAdapter; 
private String[] arrPath; 
private boolean[] thumbnailsselection; 
private int ids[]; 
private int count; 
private Cursor imagecursor = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.custom_gallery); 
    grdImages = (GridView) findViewById(R.id.grdImages); 
    btnSelect = (Button) findViewById(R.id.btnSelect); 
    final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID}; 
    final String orderBy = MediaStore.Images.Media._ID; 
    imagecursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, orderBy); 
    int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID); 
    this.count = imagecursor.getCount(); 
    this.arrPath = new String[this.count]; 
    ids = new int[count]; 
    this.thumbnailsselection = new boolean[this.count]; 
    ArrayList<Items> list=new ArrayList<>(); 
    for (int i = 0; i < this.count; i++) { 
     imagecursor.moveToPosition(i); 
     ids[i] = imagecursor.getInt(image_column_index); 
     int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA); 
     // arrPath[i] = imagecursor.getString(dataColumnIndex); 
     Items items=new Items(); 
     items.setChkImage(youResourceId); 
     items.setThumbImageUrl(imagecursor.getString(dataColumnIndex)); 
     items.setIsImageSelected(false); 
     list.add(items); 

     Log.e("arrPath", "" + arrPath[i]); 
    } 
    imageAdapter = new ImageAdapter(list); 
    grdImages.setAdapter(imageAdapter); 

    btnSelect.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      final int len = thumbnailsselection.length; 
      int cnt = 0; 
      String selectImages = ""; 
      for (int i = 0; i < len; i++) { 
       if (thumbnailsselection[i]) { 
        cnt++; 
        selectImages = selectImages + arrPath[i] + "|"; 
       } 
      } 
      if (cnt == 0) { 
       Toast.makeText(getApplicationContext(), "Please select at least one image", Toast.LENGTH_LONG).show(); 
      } else { 

       Log.d("SelectedImages", selectImages); 
       Intent i = new Intent(); 
       i.putExtra("data", selectImages); 
       setResult(Activity.RESULT_OK, i); 
       finish(); 
      } 
     } 
    }); 
} 
public class ImageAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private String[] arrPath; 
    private ArrayList<Items> list; 

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

    @Override 
    public int getViewTypeCount() { 
     return arrPath.length; 
    } 


    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.custom_gallery_item, null); 
      holder.imgThumb = (ImageView) convertView.findViewById(R.id.imgThumb); 
      holder.chkImage = (ImageView) convertView.findViewById(R.id.chkImage); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 

     } 

     if(list.get(postion).isImageSelected()){ 
      holder.chkImage.setVisibility(View.VISIBLE); 
     }else{ 
      holder.chkImage.setVisibility(View.GONE); 
     }   

     holder.imgThumb.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       int id = holder.chkImage.getId() 
       if (list.get(postion).isImageSelected()) { 
        holder.chkImage.setVisibility(View.GONE); 
        list.get(postion).setIsImageSelected(false); 
       } else { 
        holder.chkImage.setVisibility(View.VISIBLE); 
        list.get(postion).setIsImageSelected(true); 
       } 
       notifyDataSetChanged(); 
      } 
     }); 
     Picasso.with(CustomPhotoGalleryActivity.this) 
       .load(list.get(position).getThumbImageUrl()) 
       .resize(150, 150) 
       .centerCrop() 
       .into(holder.imgThumb); 
     return convertView; 
    } 
} 

class ViewHolder { 
    ImageView imgThumb; 
    ImageView chkImage; 
    int id; 
} 
} 

public class Items { 


    int chkImage; 
    String thumbImageUrl; 
    boolean isImageSelected; 


    public int getChkImage() { 
     return chkImage; 
    } 

    public void setChkImage(int chkImage) { 
     this.chkImage = chkImage; 
    } 

    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

Ich versuchte dies. Seine nicht funktioniert :( – AmeyaG

+0

welches Problem Sie konfrontiert ?? –

+0

nehme ich das Bild in der 0-ten Position von gridview wählen sie „tickte“ wird. Und wenn ich nach unten scrollen automatisch paar Bilder unten auch die tickte und die 0-te Position Bild zu erhalten, das war ! tickte früher unticked – AmeyaG

Verwandte Themen