2015-02-17 3 views
0

У меня есть приложение для Android, работающее с облачными конечными точками Google. Один из моих действий отправляет запрос в хранилище данных, чтобы получить список объектов Message. Этот объект имеет поле byte[], которое содержит уменьшенное изображение. Есть еще два поля: Автор и Временная метка.Как использовать ImageView с SimpleAdapter?

Затем в действии должен отображаться ListView, отображающий как миниатюры, так и поля автора и метки времени. Вот мой текущий код, который отображает только некоторые из моих ресурсов изображения и автор/временных меток поля:

messages_list_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<ImageView 
    android:id="@+id/messages_thumbnail" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="7dp" 
    android:layout_marginTop="7dp" 
    android:background="@null" 
    android:src="@drawable/photo" /> 

<TextView 
    android:id="@+id/messages_author" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@id/messages_thumbnail" 
    android:layout_marginLeft="7dp" 
    android:layout_toRightOf="@id/messages_thumbnail" 
    android:textColor="#303030" /> 

<TextView 
    android:id="@+id/messages_timestamp" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@id/messages_thumbnail" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="7dp" 
    android:textColor="#303030" /> 

А теперь часть, где я управлять SimpleAdapter с Список Hashmap:

final List<HashMap<String, Object>> messages = new ArrayList<HashMap<String, Object>>(); 
      List<Message> listmessages = messagesCollection.getItems(); 
      for (Message message : listmessages) { 
       HashMap<String, Object> element; 
       element = new HashMap<String, Object>(); 
       byte[] miniature = message.decodeMiniature(); //what to do with this? 
       element.put("AUTHOR", message.getAuthor()); 
       element.put("TIMESTAMP", message.getTimestamp()); 
       messages.add(element); 
      } 
      ListAdapter simpleAdapter = new SimpleAdapter(context, 
        messages, R.layout.messages_list_layout, 
        new String[] { "AUTHOR", "TIMESTAMP"}, 
        new int[] { R.id.messages_author, R.id.messages_timestamp }); 
      listView_messages.setAdapter(simpleAdapter); 

ответ

1

Вы должны использовать BitmapFactory декодировать массив байт в растровом и сохранить его на карту с новым ключом (как «АВТОР», «T IMESTAMP ")

, например:

byte[] miniature = message.decodeMiniature(); 
Bitmap image = BitmapFactory.decodeByteArray(miniature, 0, miniature.length); 
element.put("IMAGE", image); 
... 
ListAdapter simpleAdapter = new SimpleAdapter(context, 
       messages, R.layout.messages_list_layout, 
       new String[] { "AUTHOR", "TIMESTAMP", "IMAGE"}, 
       new int[] { R.id.messages_author, R.id.messages_timestamp, R.id.messages_thumbnail }); 

и использование связующего:

adapter.setViewBinder(new SimpleAdapter.ViewBinder() { 
        @Override 
        public boolean setViewValue(View view, Object data,String textRepresentation) 
        { 
         if((view instanceof ImageView) & (data instanceof Bitmap)) 
         { 
          ImageView iv = (ImageView) view; 
          Bitmap bm = (Bitmap) data; 
          iv.setImageBitmap(bm); 
          return true; 
         } 
         return false; 
        } 
       }); 
+0

Он отлично работает, спасибо. – Kritias

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