我使用eclipse IDE在android中显示带有文本视图的数字。我必须在每个号码后实施2分钟的延迟。我怎样才能做到这一点? 这是我的代码:
int counter1 = 0;
String stringVal;
TextView textview1;
textview1 = (TextView) findViewById(R.id.textView1);
while (counter1 < 10) {
stringVal = Integer.toString(counter1);
textview1.setText(stringVal);
counter1++;
}
答案 0 :(得分:1)
您无法阻止UI线程。通常当你想延迟做事时,你应该考虑使用Handler
。在这种情况下,仅使用postDelayed
的{{1}}功能可能更简单:
view
答案 1 :(得分:1)
您可以在每个onProgressUpdate中使用AsyncTask并设置新的TextView:
protected class InitTask extends AsyncTask<Context, Integer, String>
{
// -- run intensive processes here
// -- notice that the datatype of the first param in the class definition matches the param passed to this method
// -- and that the datatype of the last param in the class definition matches the return type of this method
@Override
protected String doInBackground( Context... params )
{
//-- on every iteration
//-- runs a while loop that causes the thread to sleep for 2 minutes
//-- publishes the progress - calls the onProgressUpdate handler defined below
//-- and increments the counter variable i by one
int i = 0;
while( i <= 50 )
{
try{
Thread.sleep( 2*60*1000);
publishProgress( i );
i++;
} catch( Exception e ){
Log.i("makemachine", e.getMessage() );
}
}
return "COMPLETE!";
}
// -- gets called just before thread begins
@Override
protected void onPreExecute()
{
Log.i( "makemachine", "onPreExecute()" );
super.onPreExecute();
}
// -- called from the publish progress
// -- notice that the datatype of the second param gets passed to this method
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
Log.i( "makemachine", "onProgressUpdate(): " + String.valueOf( values[0] ) );
_percentField.setText( ( values[0] * 2 ) + "%");
_percentField.setTextSize( values[0] );
}
// -- called if the cancel button is pressed
@Override
protected void onCancelled()
{
super.onCancelled();
Log.i( "makemachine", "onCancelled()" );
_percentField.setText( "Cancelled!" );
_percentField.setTextColor( 0xFFFF0000 );
}
// -- called as soon as doInBackground method completes
// -- notice that the third param gets passed to this method
@Override
protected void onPostExecute( String result )
{
super.onPostExecute(result);
Log.i( "makemachine", "onPostExecute(): " + result );
_percentField.setText( result );
_percentField.setTextColor( 0xFF69adea );
_cancelButton.setVisibility( View.INVISIBLE );
}
}
答案 2 :(得分:1)
你应该在这里使用Handler,因为它们不会阻止UI线程。如上所述。使用
posDelayed(your_runnable, deley_time_in_millis)
有关详细信息,请参阅Handler documentation和教程:Android Background Processing with Handlers and AsyncTask and Loaders。
答案 3 :(得分:0)
执行以下操作
Handler handler = new Handler();
// perform first action
handler..postDelayed(new Runnable() {
public void run() {
// peform second action
}
}, 2*60*1000);