2011-09-13 5 views
4

私は、.netサーバーから取得したイメージとメッセージを表示するアプリケーションを実装しています。そのために、私はをTextViewImageViewと動的にforループを使って追加しています。 最初に私はメッセージを取得していると私はImageViewに配置されたダミー画像でTextViewにそれらを追加している:アンドロイドでの画像ビューのIDの移動に問題がありますか?

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()を使用しています。イメージビューの最後のIDを取得しています。しかし、私は個々の画像ビューIDを取得する必要があります。

ダミー画像を実際のものに変更するにはどうすればよいですか? ありがとうございます。

答えて

1

あなたは、各メッセージからマップ内の各ImageViewのIDを格納する必要があるように見える - >そうのような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に怠惰な負荷にあなたのイメージを時間を来るとき

(あなたのコードは次のように見えることができるものの合計推測)あなたが何かを行うことができるかもしれません

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のIDの参照を調べます非同期タスクと同様です。関連付けられたリソースIDを使用してImageViewの作成ループ内の各メッセージにまたがることができ、各asycタスクがネットワーク応答からuiを更新することができます。

関連する問題