1

У меня возникли проблемы с возвратом ключа оборудования на телефоне Android для работы с webView. Ниже приведен код, который я использую. Каждый раз, когда я запускаю приложение, он закрывается.Кнопка «Назад» в веб-обозревателе Android?

package com.knowideas.transithub; 
import android.app.Activity; 

import android.os.Bundle; 

import android.os.Handler; 

import android.util.Log; 

import android.view.KeyEvent; 

import android.webkit.WebChromeClient; 

import android.webkit.WebSettings; 

import android.webkit.WebView; 

import android.webkit.WebViewClient; 

public class WebViewDemo extends Activity { 

    private static final String LOG_TAG = "WebViewDemo"; 

    private WebView mWebView; 

    private Handler mHandler = new Handler(); 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // Check if the key event was the BACK key 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); 
    } 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     mWebView = (WebView) findViewById(R.id.webView); 

     WebSettings webSettings = mWebView.getSettings(); 
     webSettings.setSavePassword(false); 
     webSettings.setSaveFormData(false); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(false); 

     mWebView.setWebChromeClient(new WebChromeClient()); 

     mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); 

     mWebView.loadUrl("file:///android_asset/demo.html"); 
    } 

    final class DemoJavaScriptInterface { 

     DemoJavaScriptInterface() { 
     } 

     /** 
     * This is not called on the UI thread. Post a runnable to invoke 
     * loadUrl on the UI thread. 
     */ 
     public void clickOnAndroid() { 
      mHandler.post(new Runnable() { 
       public void run() { 
        mWebView.loadUrl("javascript:wave()"); 
       } 
      }); 

     } 
    } 
} 
+0

Что вы говорите по логарифму? Какое исключение выбрасывается? – Otra

+0

Добавить выход LogCat – Jayp

+0

См. Http://developer.android.com/guide/tutorials/views/hello-webview.html о том, как создать базовый веб-просмотр с помощью кнопки обратной кнопки –

ответ

2

Вот мое предположение:

Вы пытаетесь поймать ключевое событие слишком поздно. Вам нужно захватить его, прежде чем он попадет в веб-просмотр. Вы делаете это, устанавливая onKeyListener.

вот как:

mWebView.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_BACK) { 
        // ignore the back key 
       return true; 
      } 
      // process normally 
      return false; 
     } 
    }); 

Я не могу сделать больше, чем просто «блок» - и это то, что я пытаюсь выяснить, в другом вопросе.

Лучшие

-Yaakov

0

НА ОБОРОТЕ ПРЕССОВАННОЕ

// Так ссылки остаются внутри WebView webview.setWebViewClient (новый WebViewClient());

webview.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) { 
      WebView webView = (WebView) view; 

      switch (keyCode) { 
       case KeyEvent.KEYCODE_BACK: 
        if (webView.canGoBack()) { 
         webView.goBack(); 
         return true; 
        } 
        break; 
      } 
     } 
     return false; 
    } 
}); 
Смежные вопросы