【发布时间】:2016-04-06 21:03:57
【问题描述】:
我有一个 ArrayList 值,我想遍历 ArrayList。对于每个新值,我想用该值更新图表,然后等待一段时间,然后对下一个值执行相同的操作。
目前,我的日志显示所有值都在迭代。但是,在我的测试设备上,图表直到最后才更新;此时,所有的值都被一次加载,所以没有想要的“幻灯片”效果。
当我想开始回放 ArrayList 中的值时,调用此方法:
public void playback(){
if(ret != null) {
for (int x = 0; x < ret.size(); x++) {
addEntry(ret.get(x));
try {
Thread.sleep(100);
} catch (Exception e){
//Do nothing
}
}
} else {
Log.d(LOG_TAG, "ret was null.");
}
}
我该怎么做才能让这些值一个接一个地显示在我的图表上,每个值之间有一定的时间间隔?
编辑:这是我在 Shadab Ansari 的帮助下最终实施的解决方案:
public void playback(){
if(ret != null) {
addEntry(0);
} else {
Log.d(LOG_TAG, "ret was null.");
}
}
private void addEntry(int index) {
final int in = index;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
yVals1.get(0).setVal(ret.get(in).intValue());
RadarDataSet set1 = new RadarDataSet(yVals1, "Set 1");
// And other UI stuff
// Recursive call!
if(in < ret.size() - 1){
addEntry(in + 1);
}
}
}, 100);
}
如果不清楚,ret 是一个全局变量,其中包含我将要插入的数组。 yVals1 是用于填充雷达图的 ArrayList。
最终结果是,在此示例代码中,图表每 100 毫秒用我的 ArrayList 中的下一个值更新。在此期间,我仍然可以放大/缩小图表并毫无问题地旋转它。
【问题讨论】:
-
你能发布 addEntry() 代码吗?