1

正常に動作しているポップアップ ボタンがあります。クリックすると消えます。しかし、ユーザーが何もアクションを起こさない場合、5 秒後にポップアップを閉じるためのコードも追加したいと思いますか? それは可能ですか?

現在のコード

final ImageButton rredButton=(ImageButton)findViewById(R.id.RredButton);
    rredButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            LayoutInflater layoutInflater
            = (LayoutInflater)getBaseContext()      
            .getSystemService(LAYOUT_INFLATER_SERVICE);
            View popupView = layoutInflater.inflate(R.layout.popupright, null);
            final PopupWindow popupWindow = new PopupWindow(               
                    popupView,                
                    LayoutParams.WRAP_CONTENT,                       
                    LayoutParams.WRAP_CONTENT);     
            Button btnNxtScr = (Button)popupView.findViewById(R.id.nextscreen);             
            btnNxtScr.setOnClickListener(new Button.OnClickListener(){     
                @Override     
                public void onClick(View v) {      
                    Intent myintent1 = new Intent(colorActivity.this,colorBlueActivity.class);
                    startActivity(myintent1);
                }
            });
                    popupWindow.showAtLocation(rredButton, Gravity.CENTER, 0, 0);
                    //---                          
                    popupWindow.setFocusable(true);             
                    popupWindow.update();                          
                    //---
        }});

これは私の更新されたコードです。なにが問題ですか?

final ImageButton rredButton=(ImageButton)findViewById(R.id.RredButton);
    rredButton.setOnClickListener(new View.OnClickListener() {

        private CountDownTimer mPopUpDismissTimer; 
        public void onClick(View arg0) {
            LayoutInflater layoutInflater
            = (LayoutInflater)getBaseContext()      
            .getSystemService(LAYOUT_INFLATER_SERVICE);
            View popupView = layoutInflater.inflate(R.layout.popupright, null);
            final PopupWindow popupWindow = new PopupWindow(               
                    popupView,                
                    LayoutParams.WRAP_CONTENT,                       
                    LayoutParams.WRAP_CONTENT);     

            getPopUpDismissTimer(3000, 1000);
            mPopUpDismissTimer.start(); 

        }
            private void getPopUpDismissTimer(long millisInFuture, long countDownInterval) { 
            mPopUpDismissTimer = new CountDownTimer(millisInFuture, countDownInterval) {


            @Override
            public void onFinish() {
                Button btnNxtScr = (Button)popupView.findViewById(R.id.nextscreen);             
                btnNxtScr.setOnClickListener(new Button.OnClickListener(){     

                @Override     
                public void onClick(View v) {      
                    Intent myintent1 = new Intent(colorActivity.this,colorBlueActivity.class);
                    myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(myintent1);

                                };

        });
                popupWindow.showAtLocation(rredButton, Gravity.CENTER, 0, 0);
                //---                          
                popupWindow.setFocusable(true);             
                popupWindow.update();                          
                //---
            }

            @Override
            public void onTick(long millisUntilFinished) {

            }
            };
            }});
4

4 に答える 4

1

このような CountDownTimer を取得します。

プライベート CountDownTimer mPopUpDismissTimer; // インスタンス変数、アクティビティ クラスに入れます

private void getPopUpDismissTimer(long millisInFuture, long countDownInterval) { PopUpDismissTimer = new CountDownTimer(millisInFuture, countDownInterval) {

    @Override
    public void onFinish() {
      // put your logic for dismissing popup button
    }

    @Override
    public void onTick(long millisUntilFinished) {

    }
};

}

次に、ポップアップを閉じたい場所でこのカウントダウンタイマーを呼び出します-

getPopUpDismissTimer(5000, 1000); //5000 ミリ秒は、ポップアップを閉じたい時間です mPopUpDismisTimer.start();

于 2012-10-29T06:28:10.413 に答える
0

新しいスレッドを開始し、このスレッドを 5 秒間スリープさせてから、ダイアログを閉じてください。

何かのようなもの:

new Thread(){ run(){ Thread.sleep(5000); ここでダイアログを閉じる } }.start();

于 2012-10-29T06:20:59.767 に答える
0

Handlerを使用します。

機能postDelayed(Runnable r, long delayMillis)またはsendMessageDelayed(Message msg, long delayMillis)使用することができます。

于 2012-10-29T06:21:03.193 に答える
0

以下の行をクラスに追加します。

private static final int MSG_AUTO_DISMISS = 0;

次に、onClick コードで:

final ImageButton rredButton=(ImageButton)findViewById(R.id.RredButton);
    rredButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            //call this when displaying the dialog
            handler.sendEmptyMessageDelayed(MSG_AUTO_DISMISS, 5000);

            //your own code here
        }
    }});

ポップアップを非表示にするには、受信したときに MSG_AUTO_DISMISS メッセージを処理するハンドラーを実装する必要があるため、次のコードをクラスに追加します。

private Handler handler = new Handler() {
    @SuppressWarnings("deprecation")
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case MSG_AUTO_DISMISS:
                            //dismiss your popup here

                            handler.removeMessages(MSG_AUTO_DISMISS); //add this just in case
            break;
        }
    }
};
于 2012-10-29T06:27:10.853 に答える