【问题标题】:Android TextView and ImageView not updating until the end of loopAndroid TextView 和 ImageView 直到循环结束才更新
【发布时间】:2013-04-03 14:39:37
【问题描述】:

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

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

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

【问题讨论】:

  • 迭代循环并仅在 ImageView 中显示图像?你到底想要什么?
  • 你想展示某种动画吗?你想每隔一定的时间做一次吗?每次循环再次运行时,您的代码都会覆盖最后一个 bmp 和文本集

标签: android textview imageview


【解决方案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 添加一个 Bitmap:

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 和文本,理想情况下有一个暂停,然后显示下一个,依此类推,直到循环结束
  • 然后使用 Timer 并每 2 秒左右运行一次循环。
  • 我实际上已经尝试过了,并且出现了一个 CalledFromWrongThread 异常,指出只有创建视图层次结构的线程才能触摸其视图
【解决方案2】:

您需要创建一个缓冲区,然后每次都将您的字符串附加到缓冲区。然后最后显示它 示例

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

【讨论】:

  • 好吧,我不希望它全部显示在最后。我希望在每次迭代时显示文本。处理通常需要几秒钟,所以我应该能够看到序列中的每个图像/文本
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多