Попытка создать кнопку удаления на каждом изображении галереи - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь создать кнопку удаления для каждого изображения, которое появляется в галерее.но когда кнопка удаления нажата на любом данном изображении, он показывает тот же 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;
    }

}

1 Ответ

1 голос
/ 30 марта 2012

Сохраните URI 0 изображения в теге кнопки. Затем найдите его в onClick.

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

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

...