2014-12-05 96 views
-2

我正在嘗試使重複循環在單個文本視圖中顯示增加的數字。「do..while」方法的不正確使用

總的想法是這種

.... 
int rep = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.Layout); 

    do { meth(); } while (rep < 11); 

    } 


     private void meth() { 
     final TextView textv = (TextView) findViewById(R.id.tex); 

     String srep = Integer.toString(rep); 
     textv.setText(srep); 

     if(rep <11) { rep = rep +1; } 
          } 
    .... 

的想法是顯示數字在TextView的textv 1至10之一BY ONE在屏幕上。但是當我運行它時,它只顯示了10.我試圖在meth()中放入一個CountDownTimer,並且也在do {}循環中,但它只是使程序崩潰。

如果有人能指出我這樣做的正確方法,將不勝感激。

+0

爲什麼你在meth中創建TextView?在你的週期之前做。 – nikoliazekter 2014-12-05 14:34:08

+1

這是因爲從1增加到10發生在不到一秒 – 2014-12-05 14:36:04

+0

據我瞭解,你需要睡眠(1000);或者是在做正文的時候。 – nikoliazekter 2014-12-05 14:39:33

回答

1

試試這個

private class MethTask extends AsyncTask<String, String, String> { 

protected String doInBackground(String... urls) { 
    do { meth(); SystemClock.sleep(1000); 
    } while (rep < 11); 
    return ""; 
} 
} 

而且從的onCreate()這樣的呼籲:

new MethTask().execute(""); 
+0

剛剛嘗試過將該行放在do {}中,即do {SystemClock.sleep(1000);甲基(); } while ....在點擊活動時,屏幕會變黑10秒,然後再次顯示只顯示數字10.我認爲它實際上'睡'了10秒,直到循環跑到最後才顯示它。 – user65163 2014-12-05 14:47:08

+0

你應該在AsyncTask中調用meth()並從你的onCreate()中調用AsyncTask。 – 2014-12-05 14:50:25

+0

我不熟悉AsnycTask,你能詳細說明一下嗎? – user65163 2014-12-05 14:58:08

0

你無法運行此代碼到OnCreate中另有一件事,你不會看到任何東西,因爲的onCreate之前運行該活動已呈現。 所以,你應該做的是先建立一個CountownTimer,在OnStart方法開始這樣說:

handler.postDelayed(new Runnable() { 
    startCountDown(); 
}, 1000); 

這樣你就會知道,如果你使用CountownTimer活動顯示

UPDATE 有沒有必要調用睡眠或其他類似的方法

+0

我試過在meth()中的CountDownTimer;方法,文本顯示在Finish上。有一個延遲,但在最初的延遲後,只顯示10。我也嘗試了Do {}循環內的CountDownTimer。該方法只是崩潰的應用程序。 – user65163 2014-12-05 14:54:23