Android TextView和ImageView直到循环结束才更新

时间:2013-04-03 05:27:56

标签: android textview imageview

所以我很确定我正确使用它们但是出于某种原因我只是得到了最后一次更新。

for(int i=0; i<numImages; i++)
{
    // Stuff processes here including getting a new Bitmap bmp image
    imageView.setImageBitmap(bmp);

    text.setText(text.getText()+"image "+i+" a success!\n");
    Log.d("update", text.getText()+"image "+i+" a success!\n");
}

日志消息按预期显示,但我只看到序列中的最终文本更新和最终图像。我不确定我做错了什么

3 个答案:

答案 0 :(得分:1)

由于您要更新相同的ImageView: imageView和相同的TextView: text,因此只能看到最后一个位图和文字。

您是否尝试将所有位图和相应的文本添加到布局?

执行以下操作:

for(int i=0; i<numImages; i++)
{
// Stuff processes here including getting a new Bitmap bmp image
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bmp);
parent.addView(imageView);

TextView text = new TextView(this);
text.setText(text.getText()+"image "+i+" a success!\n");
parent.addView(text);
Log.d("update", text.getText()+"image "+i+" a success!\n");
}

如果您想每隔几秒钟向ImageView添加一个位图:

private Timer timer = new Timer();
private TimerTask timerTask;
timerTask = new TimerTask() {
 public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
         //Keep a count and change the ImageView and Text depending on that count
        }
});   
 }
};
timer.schedule(timerTask, 0, 5000);

答案 1 :(得分:0)

您需要创建一个缓冲区,然后每次将字符串附加到缓冲区。然后终于显示出来 实施例

StringBuffer buff = new StringBuffer();

for(int i=0; i<numImages; i++)
{
    // Stuff processes here including getting a new Bitmap bmp image
    imageView.setImageBitmap(bmp);
    buff.append (text.getText()+"image "+i+" a success!\n");
}
Log.d(buff.toString());

答案 2 :(得分:0)

当我想更新我的列表视图时,我遇到了这样的问题 我的日志显示几个notifyDataSetChanged()已成功执行,但只有最后一次调用改变了listview,结果是我把我的计算放在主线程中,这阻止了UI操作。

因此,请确保您的代码在单个线程中运行,仅在主线程中执行与UI相关的操作。您可以在新线程中尝试所有代码并将 text.setText(text.getText()+"image "+i+" a success!\n");放入runOnUiThread