Получение изображения из галереи Android и установка в gridview

Я ищу совет, как это сделать.

Я хочу иметь действие, в котором пользователь выбирает из галереи Android, тогда изображение будет добавлено в представление сетки для действия. Я успешно реализовал оба варианта по отдельности, но когда мне приходится их комбинировать, я теряюсь. Руководство по Grid View находится здесь. Проблема в том, что в учебнике по сетке используются изображения из res / drawable, поэтому uri, который я получаю из галереи, не совсем работает.

Как мне установить изображение внутри класса ImageAdapter? Я пытался сделать imageView.setImageBitmap (bitmap) с адресом uri одного из изображений в моем телефоне, но это не сработало.

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

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

Спасибо

Ниже приведен код из сетки, который я редактировал:

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

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

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

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }


        Uri targetUri = Uri.parse(tests.get(0));
        //tests contains the uri of the photo i'm trying to import from my phone gallery in string form
        Bitmap bitmap;
        bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
        imageView.setImageBitmap(bitmap);

        return imageView;
    }
}

person user1610613    schedule 26.08.2012    source источник
comment
GridView не ограничивается изображениями в папке для рисования. Вы можете отображать любое изображение в GridView.   -  person Swayam    schedule 27.08.2012
comment
Я понимаю это, но как мне это сделать? setImageBitmap должен был работать, но не уверен, почему этого не произошло. Меня также больше беспокоит, сработает ли обновление, если я сделал это таким образом.   -  person user1610613    schedule 27.08.2012
comment
Я не могу сказать вам, что случилось, пока не увижу код, который вы использовали.   -  person Swayam    schedule 27.08.2012
comment
Вы пробовали использовать setImageUri (), как я уже упоминал в своем ответе?   -  person Swayam    schedule 27.08.2012


Ответы (1)


Ответ на первую часть: Если ваши тесты содержат Uri выбранного вами изображения, просто используйте imageView.setImageURI(targetUri).

Ответ на вторую часть: Чтобы обновить GridView, просто вызовите mGridView.invalidateViews(), и весь ваш GridView будет перерисован, и, таким образом, здесь будут отражены любые изменения, которые произошли в вашем источнике. Нет необходимости снова вызывать setAdapter (). setAdapter () изначально будет вызываться только один раз, когда вы впервые рисуете сетку. После этого просто сделайте invalidateViews (), чтобы обновить его.

person Swayam    schedule 26.08.2012