LoginSignup
10
10

More than 5 years have passed since last update.

2回以上同じコードが呼ばれてしまう時の対処法

Posted at

WebViewなどでディバイスの戻るボタンを押すとコードで指定していないのにもかかわらずgoBack()が何回も呼ばれてしまうことがありました。この時は一回目が呼ばれてから二回目が呼び出されるまでの間の時間を指定してあげると二回目からは呼ばれなくなります。

人間が使っていれば0.00数秒以内に何回も同じところが呼び出されることはまずないので、500ミリセカンド(適度に短い時間)以内に再び呼ばれたコードは読み込まないように指定してあげると解決しそうです。

static long FirstClick;
WebView webview;


@Override
    public void onBackPressed(){
        if(FirstClick + 500 > System.currentTimeMillis()){
            //500ミリセカンド以内に二回呼ばれている
        }else{
                //一回目もしくは時間を開けてもう一度押されている
            webview.goBack();
            FirstClick = System.currentTimeMillis();
            return;
        }
        super.onBackPressed();
    }

FirstClickはelse節の最後で指定されるまでは初期値の0なので、一度目に呼ばれた時のif(FirstClick + 500 > System.currentTimeMillis())内は必ずfalseになります。二回目は(500(millisecond)>10:00:00:01-10:00:00:00)といったような形で計算されるのでもし間隔が十分になかった場合は何も起動しません。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10