Android - добавление фотографий, сделанных пользователем, в список - PullRequest
2 голосов
/ 29 декабря 2011

В настоящее время у меня есть простой адаптер представления списка, который содержит две строки текста. Далее я пытаюсь добавить опцию отображения фотографии, сделанной пользователем, в виде списка. Я изменил свой список адаптеров так:

standardAdapter = new SimpleAdapter(this, list, R.layout.post_layout,
                new String[] { "time", "post", "image"}, new int[] {
                        R.id.postTimeTextView, R.id.postTextView, R.id.post_imageView});

Затем я добавляю его в хэш-карту как обычно и обновляю адаптер:

// create a new hash map with the text from the post
        feedPostMap = new HashMap<String, Object>();
        feedPostMap.put("time", currentTimePost);
        feedPostMap.put("post", post);
        if(photoWasTaken == 1){
            feedPostMap.put("image", pictureTaken);
        }
        //add map to list
        list.add(feedPostMap);

        // refresh the adapter
        standardAdapter.notifyDataSetChanged();

Наконец, вот код активности по результату:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "ON activity for result- CAMERA");
        if (resultCode == Activity.RESULT_OK) {
            //get and decode the file
            pictureTaken = BitmapFactory.decodeFile("/sdcard/livefeedrTemp.png");

            //Display picture above the text box
            imageViewShowPictureTaken.setImageBitmap(pictureTaken);
            displayPhotoLayout.setVisibility(LinearLayout.VISIBLE);

            //NEW - make photo variable = 1
            photoWasTaken = 1;
        }
    }

Однако я столкнулся с проблемой. Фотография в растровом виде не добавляется в представление списка. Это просто выглядит как пустой пробел. Я что-то здесь не так делаю? Во-вторых, если пользователь решил не делать снимок, то изображение не должно отображаться. Я не уверен, как это реализовать. Должен ли я создать собственный адаптер списка?

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 30 декабря 2011

Проблема в том, что SimpleAdapter по умолчанию не поддерживает растровые изображения.

По умолчанию значение будет рассматриваться как ресурс изображения.Если значение не может использоваться в качестве ресурса изображения, оно используется в качестве изображения Uri.

Однако существует решение.Вы можете установить пользовательский ViewBinder и сделать привязку самостоятельно.

class MyViewBinder implements SimpleAdapter.ViewBinder {
    @Override
    public boolean setViewValue(View view, Object data, String textRepresentation) {
        if (view instanceof ImageView && data instanceof Bitmap) {
            ImageView v = (ImageView)view;
            v.setImageBitmap((Bitmap)data);
            // return true to signal that bind was successful
            return true;
        }
        return false;
    }
}

И установить это в свой SimpleAdapter:

adapter.setViewBinder(new MyViewBinder());

Таким образом, каждый раз, когда SimpleAdapter пытается привязать значение к представлению, он сначала вызывает метод setViewValue привязки представления.Если он возвращает false, он пытается связать его сам.


Вы также можете попытаться вставить в свою карту URL-адрес в виде строки, указывающей на местоположение SD-карты.Я не уверен, однако, что SimpleAdapter может справиться с этим.


Также смотрите этот пост: Динамически показывать изображения из ресурса / рисования

...