Проблема с получением идентификатора изображения в Android? - PullRequest
4 голосов
/ 13 сентября 2011

Я внедряю приложение, отображающее изображения и сообщения, полученные с сервера .net. Для этого я динамически добавляю LinearLayout с TextView и ImageView, используя цикл for. Сначала я получаю сообщения и добавляю их в TextView с фиктивными изображениями в ImageView:

for(int i = 0; i < messages.size(); i++) { 
    FrameLayout f1 = new FrameLayout(this);
    LinearLayout l1 = new LinearLayout(this);
    LinearLayout l2 = new LinearLayout(this);
    im = new ImageView(this);
    TextView tv = new TextView(this);
    tv.setText(messages.get(i).getmessage());

    im.setImageResource(R.drawable.person);
    l1.addView(tv);
    l2.addView(im);
    f1.addView(l1);
    f1.addView(l2);

    ((LinearLayout)findViewById(R.id.LinearlayoutMessage)).addView(f1);
}

Через некоторое время я получаю оригинальные изображения. Мое намерение состоит в том, чтобы заменить фиктивные изображения оригинальными. Для достижения этого я использую imageview.getid(), к сожалению, я получаю последний идентификатор изображения. Но мне нужно получить каждый индивидуальный идентификатор изображения.

Как лучше всего заменить фиктивные изображения на реальные?

1 Ответ

1 голос
/ 01 декабря 2011

Похоже, вам нужно хранить каждый идентификатор imageView на карте из каждого сообщения -> imageView примерно так:

Map<Message, Long> messageMapping = new HashMap<Message, Long>();

for(int i = 0; i < messages.size(); i++) { 
    FrameLayout f1 = new FrameLayout(this);
    LinearLayout l1 = new LinearLayout(this);
    LinearLayout l2 = new LinearLayout(this);
    im = new ImageView(this);
    TextView tv = new TextView(this);

    //add mapping
    messageMapping.put(messages.get(i), im.getId());

    tv.setText(messages.get(i).getmessage());

    im.setImageResource(R.drawable.person);
    l1.addView(tv);
    l2.addView(im);
    f1.addView(l1);
    f1.addView(l2);

    ((LinearLayout)findViewById(R.id.LinearlayoutMessage)).addView(f1);
}

Затем, когда придет время лениво загрузить ваши изображения в существующие imageViews, которые вам просто необходимычтобы найти ссылку на идентификатор imageView с помощью сопоставления сообщений:

(полное предположение о том, как может выглядеть ваш код)

for(int i = 0; i < messages.size(); i++){
    Image image = queryServerForImage(messages.get(i).getImageId());
    ImageView imageView = ((ImageView)findViewById(messageMapping.get(messages.get(i))));
    //some conversion & seteup may be needed to get image into proper format
    imageView.setImageBitmap(image);
}

Возможно, вы сможете сделать что-то подобное с асинхронными задачами.Вы можете объединить каждый из них в цикле создания ImageView сообщения с соответствующим идентификатором ресурса, и каждая асинхронная задача обновляет пользовательский интерфейс из сетевого ответа.

...