[英]Android TextView.setText working only sometimes inside Runnable
我有一個postDelayed 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()函數起作用或不起作用。 else 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++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.