0

レイアウトの下部にタブのような構造を表示するレイアウトに取り組んでいます。ダブルタップで表示し、5秒後に非表示にする必要があります。だから私はこのカウントダウンタイマーを使用しています:

public void timer()
{
     cdt=new CountDownTimer(5000,1000) {

        @Override
        public void onTick(long millisUntilFinished) {

            System.out.println("Timer Working"+millisUntilFinished+"");

        }

        @Override
        public void onFinish() {

            System.out.println("Finished");
            main =(LinearLayout)findViewById(R.id.parent);

            ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams)main.getLayoutParams();
            mlp.height=420;

            set_up_views();
            find_module();
            tl.setVisibility(View.INVISIBLE);


        }
    }.start();

}

しかし、このタイマーを停止して再開する方法がわかりません。どのようにできるのか?

4

1 に答える 1

1

この場合、CountDownTimer を使用しないことをお勧めします。

Handler.postDelayed(Runnable runnable, long delay)を使用する

public class yourActivity extends Activity
{
     public Handler handler = new Handler();


     ...


     public void hideAfter5Sec()
     {
         handler.postDelayed(new Runnable()
         {
             View view = findViewById(view_to_hide);
             view.setVisibility(View.INVISIBLE);
         }, 5000);

     } 
}

postDelayed は 5 秒後にそのコードを実行します。

編集:

postDelayed は、Lopper.loop() を介して 5 秒後に 1 回だけ呼び出されます。hideAfter5Sec() への複数の呼び出しがある場合、postDelayed への複数の呼び出しのみが取得されます。

複数の呼び出し hideAfter5Sec() がある場合、 hideAfter5Sec() はそれを隠しているだけなので、問題はないと思います。そのため、1つまたは複数の場合、ビューが非表示になります。

hideAfter5Sec() の最後の呼び出しでのみ非表示にする場合は、このバリアントを使用します。

public class yourActivity extends Activity
{
     public Handler handler = new Handler();
     public long lastHideAfter5Sec = 0L;

     ...


     public void hideAfter5Sec()
     {
         lastHideAfter5Sec = System.currentTimeMillis();
         handler.postDelayed(new Runnable()
         {
             if(System.currentTimeMillis() - lastHideAfter5Sec < 5000) 
                 return;
             View view = findViewById(view_to_hide);
             view.setVisibility(View.INVISIBLE);
         }, 5000);

     } 
于 2012-03-20T13:33:01.067 に答える