2

我有一个带有本地html,css和javasccript文件的android应用程序。Android Webview,当通过webview打开新链接时,后退按钮不起作用

其中一个页面包含图像列表,这些图像链接到连接到它们的外部网站。

每当我点击链接,网址就会在网页视图中打开。但是当我点击后退按钮时,它不会回到上一页。

它适用于除使用外部链接的页面以外的所有页面。

的MainActivity.java看起来是这样的:

public class MainActivity extends Activity { 

WebView mWebView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    mWebView = (WebView) findViewById(R.id.activity_main_webview); 
    mWebView.loadUrl("file:///android_asset/www/index.html"); 

    // Enable Javascript 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

    mWebView.setWebViewClient(new WebViewClient()); 
    // Force links and redirects to open in the WebView instead of in a browser 
} 

@Override 
public void onBackPressed() { 
    if(mWebView.canGoBack()) { 
     mWebView.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    // Check if the key event was the Back button and if there's history 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return true; 
    } 
    // If it wasn't the Back key or there's no web page history, bubble up to the default 
    // system behavior (probably exit the activity) 
    return super.onKeyDown(keyCode, event); 
} 

}

的MyAppWebViewClient.java看起来是这样的:

public class MyAppWebViewClient extends WebViewClient { 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (Uri.parse(url).getHost().equals("/menu")) { 
     return true; 
    } 

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
    view.getContext().startActivity(intent); 
    return true; 
} 

}

回答

0

看看我做了我的应用程序,你可以使用这个以及...

@Override 
    public void onBackPressed() { 

     if (webView.canGoBack()) { 

      webView.goBack(); 

     } else { 
      if (backPressed) { 
       super.onBackPressed(); 
       return; 
      } 

      this.backPressed = true; 
      Toast.makeText(this, "Press Back One More Time To Exit", Toast.LENGTH_SHORT).show(); 

      new Handler().postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        backPressed = false; 
       } 
      }, 2000); 

     } 

    } 

在此代码,如果你的web视图可以回到它会回去,但如果它不能举杯将出现要求用户再次按BACK退出只是为了防止意外的回压....

Handler.postDelayed()用于设置2秒的时间限制....两秒钟后用户再次被提示按回....