как создать собственную галерею из изображений устройств в android

Я хочу создать собственную галерею изображений с кнопкой камеры. Я могу отображать все изображения устройств в сетке, а также захватывать изображения. но представление сетки не обновляется динамически .. plz предложите

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

//--------code to get images from device--------------  
private void getImages()
    {
    projection = new String[]{MediaStore.Images.Thumbnails._ID};
    cursor = managedQuery(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
            projection,
            null,
            null,
            MediaStore.Images.Thumbnails.IMAGE_ID);

         columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);
}

//--------
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    Log.e("RESULT CODE", "--" + resultCode);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_REQUEST) {
            Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
            Random random = new Random();
            int no1 = random.nextInt(15 - 0);
            int no2 = random.nextInt(25 - 15) + 15;
            String fileName = tempString.substring(no1, no2) + ".jpg";
            try {
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                File outFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), fileName);
                FileOutputStream fos = new FileOutputStream(outFile);
                photo.compress(Bitmap.CompressFormat.JPEG, 100, fos);

                fos.flush();
                fos.close();
                getImages();
            //    sdcardImages.setAdapter(imageAdapter);
                imageAdapter.notifyDataSetChanged();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
//--custom adapter class
public class ImageAdapter extends BaseAdapter{        
 Context context;

    public ImageAdapter(Context localContext){
       context = localContext;}

    public int getCount() {
        return cursor.getCount();
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
      final ImageView picturesView;
      if (convertView == null){

            picturesView = new ImageView(context);         

            cursor.moveToPosition(position);

            int imageID = cursor.getInt(columnIndex);   


   picturesView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTER
          NAL_CONTENT_URI,"" + imageID));



            picturesView.setScaleType(ImageView.ScaleType.FIT_XY);

            picturesView.setPadding(5, 5, 5, 5);

            Display display = getWindowManager().getDefaultDisplay();

            int width = display.getWidth() / 3;


      picturesView.setLayoutParams(new GridView.LayoutParams(width, width));
        } else {
            picturesView = (ImageView) convertView;
        }
        return picturesView;
    }//get view
}//image adapter

person User_1191    schedule 01.12.2015    source источник
comment
просто вызовите notifydatasetchanged() на адаптере для представления сетки после обновления данных   -  person Bhargav    schedule 01.12.2015
comment
спасибо .. все еще сталкиваюсь с той же проблемой   -  person User_1191    schedule 01.12.2015
comment
Итак, как вы это делаете? вы получаете изображения, используя эту функцию getImages(), а затем заполняете свой адаптер, да? Используете ли вы адаптер курсора? пожалуйста, опубликуйте код для вашего адаптера и класса, который использует адаптер   -  person Bhargav    schedule 01.12.2015
comment
когда пользователь захватывает изображение с помощью камеры и обновляет представление сетки по его результату.   -  person User_1191    schedule 01.12.2015
comment
Вы добавляете только что захваченное изображение с камеры в адаптер просмотра сетки ??   -  person Bhargav    schedule 01.12.2015
comment
отредактируйте свой вопрос и добавьте код к своему вопросу в соответствующие блоки кода, которые здесь не читаются   -  person Bhargav    schedule 01.12.2015


Ответы (1)


попробуйте это, я думаю, поскольку вы обновляете представление изображения только в том случае, если convertview == null, когда представление перерабатывается, кажется, что вы не обновляете изображение, попробуйте заменить getView() этим

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView pictures;
    if (convertView == null)
        pictures = new ImageView(context); 
        convertView.setTag(pictures);
    } else {
        pictures = (ImageView) convertView.getTag(); 
    }
    cursor.moveToPosition(position);
    int imageID = cursor.getInt(columnIndex);
    picturesView.setImageURI(Uri.withAppendedPath(MediaSt‌​ore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID)); 
    picturesView.setScaleType(ImageView.ScaleType.FIT_XY); 
    picturesView.setPadding(5, 5, 5, 5);
    return picturesView; 
}//get view 
person Bhargav    schedule 01.12.2015