2016-06-10 90 views
0

首先,我真的不知道有關Java的任何事情。我做前端開發,這就是真的,我試圖通過尋找文檔和教程,但我有問題..我有一個網站,我試圖讓它在Android上運行。我除了回壓在Android設備上幾乎所有工作退出應用程序(這是從我讀過預期)後退按鈕的Android的WebView

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

是什麼,我嘗試添加到我的代碼,但我得到的錯誤:

Error:(45, 24) error: non-static method canGoBack() cannot be referenced from a static context 

Error:(46, 24) error: non-static method goBack() cannot be referenced from a static context 

Error:(48, 22) error: cannot find symbol method onBackPressed() 

Error:(43, 9) error: method does not override or implement a method from a supertype 

許多在此先感謝!

P.S - 下面是完整的代碼。

package com.appname.appname; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.view.KeyEvent; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    WebView myWebView = (WebView) findViewById(R.id.myWebView); 
    myWebView.loadUrl("http://www.website.com"); 
    myWebView.setWebViewClient(new MyWebViewClient()); 

    //Settings 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 

} 

private class MyWebViewClient extends WebViewClient { 

    //Open links internally 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (Uri.parse(url).getHost().equals("www.website.com")) { 
      return false; 
     } 
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(intent); 
     return true; 
    } 

    //Back Button Fix 

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

謝謝。

編輯:我也試過這個代碼,我在另一疊後發現。

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

     } 
     return super.onKeyDown(keyCode, event); 
    } 

有人告訴我,在教程中按Ctrl + O(在Android Studio中),並選擇一個的onkeydown覆蓋,但這不是我的列表。然後我發現onKeyDown用於pre 2.0手機?所以我試圖尋找onBackPressed,但我也找不到。我知道這將是東西很容易..

+0

這個答案將幫助您http://stackoverflow.com/a/6077173/343679 – Sharj

回答

0

嘗試改變:

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

到:

@Override 
public void onBackPressed() 
{ 
    WebView webView = (WebView) findViewById(R.id.webView1); 
    if(webView.canGoBack()){ 
     webView.goBack(); 
    }else{ 
     super.onBackPressed(); 
    } 
} 

說明: 你應該叫canGoBack()goBack()的網頁流量您正在使用的實例(移至上一個視圖)。這也是爲什麼該方法在實例級別而不是在類級別(靜態)

更新聲明:

聲明全局

WebView myWebView; 


this.myWebView = (WebView) findViewById(R.id.myWebView); 

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

全碼:

package com.appname.appname; 

    import android.app.Activity; 
    import android.content.Intent; 
    import android.net.Uri; 
    import android.os.Bundle; 
    import android.webkit.WebSettings; 
    import android.webkit.WebView; 
    import android.webkit.WebViewClient; 
    import android.view.KeyEvent; 

    public class MainActivity extends Activity { 

     WebView myWebView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     this.myWebView = (WebView) findViewById(R.id.myWebView); 
     myWebView.loadUrl("http://www.website.com"); 
     myWebView.setWebViewClient(new MyWebViewClient()); 

     //Settings 
     WebSettings webSettings = myWebView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

    } 

    private class MyWebViewClient extends WebViewClient { 

     //Open links internally 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (Uri.parse(url).getHost().equals("www.website.com")) { 
       return false; 
      } 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 

     } 


     //Back Button Fix 

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

錯誤:無法解析法「onBackPressed()」 – Jesse

+0

@JesseWalby看到我更新的答案全code.Just複製和粘貼它。 – Ironman

+0

錯誤:(44,9)錯誤:方法不覆蓋或超類型實現的方法 錯誤:(49,22)錯誤:無法找到符號方法onBackPressed() – Jesse

0

刪除此:

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

從內部類MyWebViewClient內。它應該在課外。

public class MainActivity extends Activity { 

    ... 
    ... 
    private class MyWebViewClient extends WebViewClient { 
     ... 
     ... 
    } 
    ... 
    @Override 
    public void onBackPressed() { 
     if (myWebView.canGoBack()) { 
      myWebView.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 
} 
+0

非常感謝。 – Jesse