2012-03-30 2 views
0

Я пытаюсь создать кнопку удаления над каждым изображением, которое появляется в галерее. но когда кнопка удаления нажата на любом данное изображении она показывает ту же URI вместо одного изображения он держит ..
моего адаптер изображения:Попытка создать кнопку удаления на каждом изображении галереи

public class GallImageAdapter extends BaseAdapter { 
    public Cursor cursor; 
    private int columnIndex; 
    private Context context; 
    int imageBackground; 
    String url; 
    Uri uri; 
    int originalImageId; 
    int imageID; 
    int columnData; 
    ViewGroup myp; 

    public GallImageAdapter(Context ctx, Cursor cur, int cIn) { 
     context = ctx; 
     columnIndex = cIn; 

     cursor = cur; 
    } 

    @Override 
    public int getCount() { 

     return cursor.getCount(); 
    } 

    @Override 
    public Object getItem(int position) { 

     return position; 
    } 

    @Override 
    public long getItemId(int position) { 

     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     myp = parent; 
     View v; 
     if(convertView ==null){ 
      v = LayoutInflater.from(context).inflate(R.layout.galitem, parent, false); 
     }else{ 
      v = convertView; 
     } 


     ImageView photo = (ImageView) v.findViewById(R.id.imageView); 
     ImageView border = (ImageView) v.findViewById(R.id.borderView); 
     ImageView d = (ImageView) v.findViewById(R.id.delView); 



     // Move cursor to current position 
     cursor.moveToPosition(position); 

     // Get the current value for the requested column 
     imageID = cursor.getInt(columnIndex); 
     // obtain the image URI 
     uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(imageID)); 
     url = uri.toString(); 
     // Set the content of the image based on the image URI 
     originalImageId = Integer.parseInt(url.substring(url.lastIndexOf("/") + 1, url.length())); 
     Bitmap b = MediaStore.Images.Thumbnails.getThumbnail(context.getContentResolver(), 
         originalImageId, MediaStore.Images.Thumbnails.MINI_KIND, null); 
     photo.setImageBitmap(b); 

     photo.setScaleType(ImageView.ScaleType.FIT_CENTER); 

     d.setOnClickListener(new OnClickListener(){ 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 



       Toast.makeText(v.getContext(), "Delete: " + uri + "?", Toast.LENGTH_LONG).show(); 
       File file = new File(cursor.getString(columnIndex)); 
       boolean deleted = file.delete(); 
       //context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
        //  Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 
      } 


     }); 

     return v; 
    } 

} 
+0

Попробуйте поместить некоторые записи там, напечатать ID изображения, uri, url и originalImageId. Будет легче следить за тем, что происходит. И, конечно, вставьте соответствующую часть журнала здесь :) – erbsman

+0

Ну, я зарегистрировал его, и в основном кнопка удаления на каждом адаптере изображения не имеет своего собственного uri, я могу дважды нажать одну и ту же кнопку удаления и получить разные uri каждый время .. или получить тот же uri на всех кнопках удаления. Думаю, мне нужен способ получить изображение этого конкретного места в галерее и как-то передать его на кнопку удаления – erik

ответ

1

Хранить URI 0f изображений в теге кнопки. Затем извлеките его в onClick.

Проблема с вашим текущим кодом заключается в том, что uri объявляется как поле уровня класса, поэтому каждый раз, когда открывается вид, его значение устанавливается на uri текущего изображения. Поскольку все ваши взгляды извлекаются при отображении макета, uri всегда будет в конечном итоге получаться последним. Затем вы получите доступ к нему через некоторое время в обработчике onClick, что одинаково для каждой кнопки. Таким образом, каждая кнопка будет получать одно и то же значение uri.

Есть и другие, возможно более элегантные способы достижения того, что вам нужно, но сохранение uri в экземпляре кнопки и получение его из представления, переданного onClick, которое является кнопкой, является простым и простым, но комментируйте setTag вызов метода, чтобы вы знали, что вы делали через 6 месяцев.

+0

, поэтому перед моим d.onClick .. я должен скажем d.setTag (imageID); ? и как его получить? – erik

+0

В onClick, ((Button) v) .getTag(); Удачи.... – Simon

 Смежные вопросы

  • Нет связанных вопросов^_^