2014-10-03 3 views
0

Привет, ребята, я пытаюсь сделать обратную кнопку на веб-просмотре возвращенной при однократном нажатии и завершить операцию с предупреждением при двойном нажатииAndroid Webview назад нажал один щелчок, чтобы вернуться назад и дважды щелкните, чтобы выйти

проблема в том, что когда я пытаюсь дважды щелкнуть, он работает так, как будто я нажал один. Он не ожидает, что время выполнения двойного щелчка

спасибо!

Код

 public void onBackPressed() 
    { 
     if (back_pressed + 1000 > System.currentTimeMillis()){ 
     new AlertDialog.Builder(this) 
      .setIcon(R.drawable.ic_launcher) 
      .setTitle("Esmalteria Cariúcha") 
      .setMessage("Sair do Sistema?") 
      .setPositiveButton("Sim", new DialogInterface.OnClickListener() 
      { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        finish();  
       } 

      }) 
      .setNegativeButton("Não", null) 
      .show(); 
     } 
     else{ 
      if(webview.canGoBack()){ 
       webview.goBack(); 
      } 
     } 
     back_pressed = System.currentTimeMillis(); 
} 

ответ

3

Попробуйте сделать это, увидеть, если это работает для вас,

boolean doubleBackToExitPressedOnce; 

@Override 
public void onBackPressed() { 
    Log.i(TAG, "onBackPressed"); 

    if (doubleBackToExitPressedOnce) { 
     Log.i(TAG, "double click"); 
     new AlertDialog.Builder(this) 
       .setIcon(R.drawable.ic_launcher) 
       .setTitle("Esmalteria Cariúcha") 
       .setMessage("Sair do Sistema?") 
       .setPositiveButton("Sim", 
         new DialogInterface.OnClickListener() { 
          @Override 
          public void onClick(DialogInterface dialog, 
            int which) { 
           finish(); 
          } 

         }).setNegativeButton("Não", null).show(); 
     return; 
    } else { 
     Log.i(TAG, "single click"); 
     if (webview.canGoBack()) { 
      Log.i(TAG, "canGoBack"); 
      webview.goBack(); 
     } else { 
      Log.i(TAG, "nothing to canGoBack"); 
     } 
    } 

    this.doubleBackToExitPressedOnce = true; 
    if (getApplicationContext() == null) { 
     return; 
    } else { 
     Toast.makeText(this, "Please click BACK again to exit", 
       Toast.LENGTH_SHORT).show(); 
    } 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce = false; 
     } 
    }, 2000); 
} 
+0

Почти! мне действительно нужно, чтобы двойной клик работал, даже если веб-просмотр может вернуться , чтобы вы могли покинуть эту деятельность в середине навигации. спасибо за быстрый ответ – Frank021

+0

, но мне также нужен один клик на goback .. – Frank021

+0

обновил мой ответ, посмотрите, работает ли это для вас. – Chitrang

0

Попробуйте

private WebView view; 
private String urlhome = "http://localhost/Default.aspx"; 
private static String currenturl = ""; 
private Boolean close_app = false; 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     if (view.canGoBack()) { 
      String url = view.getUrl(); 

      if (url.equalsIgnoreCase(urlhome)) { 
       if (close_app) { 
        // pressed twice 
        finish(); 
       } else { 
        Toast.makeText(this, "Press Back again to Exit.", 
          Toast.LENGTH_SHORT).show(); 
        close_app = true; 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          close_app = false; 
         } 
        }, 3 * 1000); 

        return true; 
       } 
      } else { 
       view.goBack(); //method goback() 
       return true; 
      } 
     } else { 
      String url = view.getUrl(); 
      if (url.equalsIgnoreCase(urlhome)) { 
       if (close_app) { 
        // pressed twice 
        finish(); 
       } else { 
        Toast.makeText(this, "Press Back again to Exit.", 
          Toast.LENGTH_SHORT).show(); 
        close_app = true; 
        new Handler().postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          close_app = false; 
         } 
        }, 3 * 1000); 

        return true; 
       } 
      }else { 
       view.loadUrl(urlhome); 
       currenturl = urlhome; 
       return true; 
      } 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

Хороший ответ всегда будет иметь объяснение того, что было сделано, и почему это было сделано таким образом не только для OP, но и для будущих посетителей SO. Пожалуйста, добавьте некоторое описание, чтобы другие поняли. –

Смежные вопросы