在Android中获取图像视图的ID的问题?

时间:2011-09-13 05:17:14

标签: android-imageview

我正在实现一个显示从.net服务器获取的图像和消息的应用程序。为此,我使用for循环动态添加LinearLayout TextViewImageView。 起初我收到消息,我将它们添加到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(),不幸的是我正在使用imageview的最后一个ID。但我需要获得每个单独的imageview id。

使用真实图像更改虚拟图像的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

看起来您需要将每个imageView ID存储在每条消息的地图中 - &gt; 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 id引用:

(您猜测代码的总体猜测)

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);
}

您可以使用异步任务执行类似操作。您可以使用关联的资源ID跨越消息ImageView创建循环中的每一个,并让每个asyc任务更新网络响应中的ui。