Android TextView.setText 有时仅在 Runnable 中工作



我有一个 postDelay Runnable 从 3 开始倒计时,执行一些代码 x 次。我通过 setText(( 向用户显示文本。setText(( 函数适用于 if,else if,else 的某些区域,但在其他区域不起作用。

final Runnable r1 = new Runnable() {
@Override
public void run() {
if ((--count != 0) && (gestureCounter != selectedItems.size())) {
mHandler.postDelayed(this, 1000);
liveView.setText("Do " + selectedItems.get(gestureCounter) + " in " + String.valueOf(count));//works
}
else if(gestureCounter != selectedItems.size()){
count=4;//3 seconds + 1
liveView.setText("Hold " + selectedItems.get(gestureCounter));//NOT WORKING
mHandler.post(this);
fcalc.setTrain(true);
while(fcalc.getTrain()){
//wait till trainig is done
}
gestureCounter++;
}
else{
liveView.setText("");//works
fcalc.Train();
fcalc.setClassify(true);
}
}
};
mHandler.post(r1);

请查看我的评论,看看哪些 setText(( 函数有效或无效。另一个 if 中的唯一

一个不起作用。有什么想法吗?

感谢您的帮助!

这是因为您正在调用mHandler.post(this);这将立即调用可再次运行的处理程序,并且您正在增加值gestureCounter,所以下次将进入此循环,它将根据条件转到第一个循环或第三个循环

尝试在该循环中添加延迟并检查

编辑:

由于您的while循环持续运行,UI没有更新,只需注释并像以下条件一样运行代码即可正常工作

喜欢这个

else if(gestureCounter != selectedItems.size()){
liveView.setText("Hold " +
selectedItems.get(gestureCounter));//NOT WORKING
mHandler.postDelayed(this, 1000); // delay added 
if(fcalc.getTrain()) {
return;
}
count=4;//3 seconds + 1
//                    fcalc.setTrain(true);
//                    while(fcalc.getTrain()){
//                        //wait till trainig is done
//                    }
gestureCounter++;
}

最新更新