2

10 秒後に TextView を非表示にする必要があります。クロノメーターを実装できると思ったのですが、経過時間が 10000 ミリ秒を超えると TextView を非表示にします。私の問題は、クロノメーターが 1 回だけカチカチ音をたててから停止することです。私が見逃したものは何ですか?

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

    }

助けてくれてありがとうヤヌス。現在うまく機能するソリューションは次のとおりです。

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 を使用すると、時間を指定でき、その時間が経過するとメッセージが表示されます。経過時間の後に 1 つのことだけを行う必要がある場合は、handleMessageメソッドでビューを非表示にするだけです。

この方法では、自分で時間を測定したり、1 秒または 1 ミリ秒ごとに計算作業を行ったりする必要はありません。メッセージが Android OS によって配信されるまで、アプリは 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 に答える