2014-10-29 49 views
0

我使用Fragment創建了WebView;這裏是我的代碼:查看webview(片段)時覆蓋後退按鈕

public class MyWebView extends Fragment { 

    private WebView webView; 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Bundle args = getArguments(); 
     String url = args.getString("url"); 
     webView = (WebView) getView().findViewById(R.id.webView); 

     webView.setWebViewClient(new MyBrowser()); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setSaveFormData(true); 
     webSettings.setUseWideViewPort(true); 
     webSettings.setLoadWithOverviewMode(true); 
     webSettings.setSupportZoom(true); 
     webSettings.setBuiltInZoomControls(true); 

     webSettings.setLoadsImagesAutomatically(true); 
     webSettings.setJavaScriptEnabled(true); 
     webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     webView.loadUrl(url); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.web_view, container, false); 

     view.setOnKeyListener(new OnKeyListener() { 
       @Override 
       public boolean onKey(View v, int keyCode, KeyEvent event) { 
        if (keyCode == KeyEvent.KEYCODE_BACK) { 
         if (webView.canGoBack()) { 
          webView.goBack(); 
          return true; 
         } 
        } 
        return false; 
       } 
     }); 

     return view;   
    } 

    private class MyBrowser extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 
} 

我試圖重寫onBackPressed()但似乎不與Fragment工作。所以我用setOnKeyListener()但它不起作用。 你能告訴我爲什麼後退按鈕關閉應用程序,而不是回到以前的網頁?

+0

我想,在這裏你可以找到更多信息... http://stackoverflow.com/questions/6077141/how-to-go-back-to-previous-page-if-back-button-被按下在webview中 – PaytoN 2014-12-01 17:41:27

+0

@PaytoN @PaytoN這個url指的是使用活動而不是片段 – WardaLyn 2015-03-11 10:55:06

+0

後退按鈕可以讓你離開當前已經打開的屏幕,萬一網頁瀏覽,無論你在哪個網頁瀏覽網頁,移動它的只有一個屏幕,(片段或活動),所以當按下它清除當前屏幕並返回,無論你在哪個網頁鏈接.. – 2018-01-29 21:35:26

回答

0

Fragment未收到OnBackPressed事件的回調。在顯示片段並在活動和片段之間來回交流時,您必須知道您的Activity狀態。

你可以讓你的代碼調用關鍵的公共布爾函數,例如,如果片段存在,你與它進行交互,你繼續以類似的方式返回true或false,讓你知道如果沒有更多頁面可以返回,則應該繼續進行該活動。