2010-10-26 84 views
2

我需要在10秒後隱藏TextView。我認爲我可以實現一個天文臺,當經過的時間大於10000毫秒時,我隱藏了TextView。我的問題是,天文鐘只打一次然後停下來。任何想法,我已經錯過了?Android計時器滴答一次並停止

Activity ctx = this; 
... 

private void ShowText(String message) 
    { 
     txtProceed.setText(message); 
     txtProceed.setVisibility(View.VISIBLE); 


     chronoHideText = new Chronometer(ctx); 
     chronoHideText.setOnChronometerTickListener(new OnChronometerTickListener() 
     { 
       public void onChronometerTick(Chronometer arg0) { 

        long elapsed = SystemClock.elapsedRealtime() - chronoHideText.getBase(); 
        Log.i("Chrono",String.valueOf(elapsed)); 
        if (elapsedTime>10000) 
        { 
         txtProceed.setVisibility(View.INVISIBLE); 
         chronoHideText.stop(); 
        } 
       } 
     } 
     ); 

     chronoHideText.setBase(SystemClock.elapsedRealtime()); 
     chronoHideText.start(); 

    } 

謝謝Janusz的幫助。現在的偉大工程的解決方案是:

Handler splashHandler = new Handler() { 
      @Override 
      public void handleMessage(Message msg) { 
        switch (msg.what) { 
        case 0: 
          //remove SplashScreen from view 
          txtProceed.setVisibility(View.INVISIBLE); 
          break; 
        } 
        super.handleMessage(msg); 
      } 
    }; 

    Message msg = new Message(); 
    msg.what = 0; 
    splashHandler.sendMessageDelayed(msg, 10000); 
+0

你真的讓你的用戶坐在通過×10秒*閃屏?請不要這樣做。 – I82Much 2010-10-26 12:44:12

+0

這不是一個啓動畫面,它是一個信息消息,同時用戶繼續使用該應用程序。它並不妨礙他,它只是屏幕上的一小段文字。 – Alin 2010-10-26 12:54:13

回答

4

您可以使用handler發送延遲的消息。 sendMessageDelayed方法使您能夠指定一個時間,並在該時間過後您將收到一條消息。如果你只需要在經過的時間後做一件事,你可以在handleMessage方法中隱藏視圖。

這樣你就不需要自己測量時間,並且每秒或者每毫秒計算一次。在Android OS提供消息之前,您的應用不會佔用CPU時間。

1
public class ButtonVisibility extends Activity { 

Button mButton; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_button); 

    mButton = (Button)findViewById(R.id.button); 

    new MyTask().execute(null); 
} 

public class MyTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      Thread.sleep(10000); 
     } 
     catch(InterruptedException e) { 
      Log.e("MyTask", "InterruptedException", e); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     mButton.setVisibility(View.INVISIBLE); 
    } 
    } 

}