2017-07-19 76 views
0

我有一個postDelayed Runnable,它從3開始倒計時執行一些代碼x次。我正在通過setText()向用戶顯示文本。 setText()函數在if,else if,else的某些區域中工作,但在其他區域中不起作用。Android TextView.setText有時只能在Runnable裏面工作

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()函數工作或沒有。如果其他人是唯一不工作的人。

任何想法?

謝謝你的幫助!

+0

您是否嘗試過調試,找出你的是可運行時的setText()不會被調用執行,甚至? –

+0

當你說「不工作」時,你是什麼意思?另外,「else if」有'mHandler.post(this)',它不會延遲而不是延遲一秒的mHandler.postDelayed(this,1000)'。那是你想要做的嗎? – Cheticamp

回答

0

這是因爲你正在調用mHandler.post(this);這將立即調用處理程序runnable,並且你正在增加值gestureCounter,所以下一次會進入這個循環,並且它會根據條件進入第一個循環或第三個循環

嘗試在這個循環也增加延遲時間並

編輯:

因爲while循環連續運行,用戶界面沒有更新,只是評論說,並運行代碼象下面這樣的條件,將工作罰款

這樣

    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++; 
       } 
+0

感謝您的幫助。不幸的是,這沒有改變。延遲不等。 – user3697344

+0

我可以知道你的計數值,gestureCounter和selectedItems.size()在開始..? –

+0

count = 4,gesturecounter = 0,selectedItems.size()= 3。謝謝 – user3697344