2014-12-05 50 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