2011-06-02 41 views
8

忽視。我打開了安裝的錯誤應用程序。它奇妙地工作。 :)帶有後退按鈕的Android Web視圖,如果沒有其他

我有我的webview中正確工作的後退按鈕,但我想知道的東西。 如何使webview回退到不再存在,而不是退出程序,而是打開一個對話框,詢問用戶是否確定不會退出。 這是我的代碼。
感謝您抽出時間。

java文件

package com.vtd.whatthe; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.Toast; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class WhatThe extends Activity { 
    private WebView webview; 

    /** Called when the activity is first created. */ 

    public void onBackPressed(){ 

     if (webview.isFocused() && webview.canGoBack()) { 
       webview.goBack();  
     } 
     else { 
       openMyDialog(null); 

     } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     webview = (WebView) findViewById(R.id.webview); 
     webview.setWebViewClient(new HelloWebViewClient()); 
     webview.getSettings().setJavaScriptEnabled(true); 
     webview.setInitialScale(50); 
     webview.getSettings().setUseWideViewPort(true); 
     webview.loadUrl("http://test2.com/"); 
    } 
    private class HelloWebViewClient extends WebViewClient { 

     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

      } 

    public void openMyDialog(View view) { 
     showDialog(10); 
    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case 10: 
      // Create our AlertDialog 
      Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Are you sure you want to exit? You have unlimited guesses!") 
        .setCancelable(true) 
        .setPositiveButton("Yes", 
          new DialogInterface.OnClickListener() { 
           @Override 
           public void onClick(DialogInterface dialog, 
             int which) { 
            // Ends the activity 
            WhatThe.this.finish(); 
           } 
          }) 
        .setNegativeButton("Keep Guessing!", 
          new DialogInterface.OnClickListener() { 

           @Override 
           public void onClick(DialogInterface dialog, 
             int which) { 
            Toast.makeText(getApplicationContext(), 
              "Good Luck!", 
              Toast.LENGTH_SHORT).show(); 
           } 
          }); 

      return builder.create(); 


     } 
     return super.onCreateDialog(id); 
    } 
} 
+0

高興。無論如何,你可能要閱讀[這篇博文](http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html)。 – 2011-06-02 21:40:59

回答

0

試試下面的代碼片段

public void back() { 
    if (history.size() > 0) { 
     history.remove(history.size() - 1); 
     if (history.size() <= 0) { 
      finish(); 
     } else { 
      setContentView(history.get(history.size() - 1)); 
     } 
    } else { 
     finish(); 
    } 
} 

@Override 
public void onBackPressed() { 
    TopNewsGroup.group.back(); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     TopNewsGroup.group.back(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
19

下面的代碼爲我工作

public void onBackPressed(){ 

    if (webview.isFocused() && webview.canGoBack()) { 
      webview.goBack();  
    } 
    else { 
      super.onBackPressed(); 
      finish(); 
    } 
} 
+0

canGoBack作品的魅力 – 2013-05-05 09:29:13

+0

令人驚歎,謝謝你的回答 – 2013-09-18 06:44:25

0

這是你所需要的代碼。

public void showAlertDialog(Context context, String title, String message, Boolean status) { 
    AlertDialog.Builder adb = new AlertDialog.Builder(this); 
    adb.setTitle(R.string.alerta); 
    adb.setMessage(getResources().getString(R.string.mserror)); 
    adb.setIcon((status) ? R.drawable.close : R.drawable.alerta); 

    adb.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
     finish(); 
    } }); 

    adb.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
     } }); 

    adb.show(); 
} 

然後

public void onBackPressed(){ 

    if (webView.isFocused() && webView.canGoBack()) { 
     webView.goBack();  
    } 
    else { 
     showAlertDialog(Web.this, "","", false); 
    } 
} 
1

試試這個,你有工作

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if(event.getAction() == KeyEvent.ACTION_DOWN) 
    { 
     switch(keyCode) 
     { 
     case KeyEvent.KEYCODE_BACK: 
      if(webView.canGoBack()) 
      { 
       myWebView.goBack(); 
      } 
      else 
      { 
       finish(); 
      } 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
}