开发者

Problem with getting the id's of image view in Android?

I am implementing an application displaying images and messages obtained from .net server. For that I'm adding LinearLayout's with TextView and ImageView dynamically by using for loop. At first I am getting messages and I'm adding them to the TextView with dummy images placed in 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);开发者_StackOverflow社区

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

After some time I am getting original images. My intention is to replace the dummy images with original ones. To achieve this I'm using imageview.getid() unfortunately I'm getting last id of the imageview. But I need to get each individual imageview id's.

What is the best way of changing dummy images with real ones?


Looks like you need to store each imageView id in a map from each message -> imageView like so:

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

Then when it comes time to lazy load your images into the existing imageViews you simply need to look up the imageView id reference by message mapping:

(Total guess of what your code could look like)

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

You may be able to do something similar with async tasks. You could span each one in the message ImageView creation loop with the associated resource id and having each asyc task update the ui from the network response.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜