2

我需要在 10 秒后隐藏一个 TextView。我想我可以实现一个 Chronometer,当经过的时间大于 10000 毫秒时,我隐藏了 TextView。我的问题是计时器只滴答一次然后停止。知道我错过了什么吗?

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);
4

2 回答 2

4

您可以使用发送延迟消息的处理程序。方法 sendMessageDelayed 使您能够指定时间,在该时间过去之后,您将收到一条消息。如果您只需要在经过的时间后做一件事,您可以在您的handleMessage方法中隐藏视图。

这样您就不需要自己测量时间并每隔一秒或一毫秒进行一次计算工作。在 Android 操作系统传递消息之前,您的应用不会占用任何 cpu 时间。

于 2010-10-26T10:16:20.583 回答
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);
    }
  }

}

于 2010-10-26T10:41:38.090 回答