Похоже, вам нужно хранить каждый идентификатор 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 сообщения с соответствующим идентификатором ресурса, и каждая асинхронная задача обновляет пользовательский интерфейс из сетевого ответа.