2016-03-30 6 views
1

私はアンドロイド用にプログラムしようとしていますが、少し問題があります。私はアプリを作ったが、電話ボタンの後ろを作って、アプリを完全に閉じずに前のページに戻ることはできない。私はWebViewで作業しています。ボタンを押すとWebViewが終了するアンドロイドキーボード

public class MainActivity extends AppCompatActivity { 

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


     getSupportActionBar().hide(); 

     // CODIGO DO WEB VIEW 

     final WebView myWebView = (WebView) findViewById(R.id.webView); 
     myWebView.loadUrl("http://www.idestudos.com.br"); 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setBuiltInZoomControls(true); 

     myWebView.setWebViewClient(new MyBrowser()); 

     myWebView.setWebViewClient(new WebViewClient() { //CODE WEBVIEW} 
+0

logcatに関連するものはありますか?私のお金は、NullPointerException、または少なくともいくつかの種類の例外になります。 –

+0

URLの変更を処理するにはhttp://developer.android.com/reference/android/webkit/WebViewClient.html#onPageStartedを確認してください。 WebViewがロードしている実際のURL(URLが更新されるたびに)を保存したまま、onBackPressed()メソッドをオーバーライドして、Activity全体を終了するのではなく、WebView内の以前のURLをロードする必要があります。 –

答えて

1

は、ソリューションです:

あなたのWebViewがURLのロードを上書きした場合、それは自動的に訪問したウェブページの履歴を蓄積

。 goBack()およびgoForward()を使用すると、履歴を前後にナビゲートできます。

たとえば、ここにあなたの活動を後方に移動するにはボタンを、デバイスをバックに使用できる方法は次のとおりです。

@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) && myWebView.canGoBack()) { 
    myWebView.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); 
} 

はそれがあなたのお役に立てば幸いです詳細はBuilding Web Apps in WebView Androidの開発者ガイドをチェックしてください!

+0

OnCreateメソッドから挿入しますか? –

+0

あなたのwebviewを作成して初期化するときはどこにでも挿入してください。それが役に立てば幸い! –

1

canGoBackを呼び出して簡単に実装できます。

if(webView.canGoBack()) { 
     webView.goBack(); 
    } 

そして、このように活動してonBackPressedメソッド内から呼び出す:ここ

@Override public void onBackPressed() { 

    if(webView != null && webView.canGoBack()) { 
     webView.goBack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

また、 'onKeyDown'も' return'する必要があります。それ以外の場合は、ユーザーがバックボタンを押しても履歴がない場合は何も起こりません。 –

+0

いいえ、super.onBackPressedを返さない限り、彼はうまくいくはずです。 – SacreDeveloper

+0

'webView.canGoBack()'がfalseの場合、 'onBackPressed'を返す必要があります。そして、私はあなたの答えを編集したことを確認します –