2014-10-29 2 views
0

Я создал WebView с использованием Fragment; Вот мой код:Переопределение обратной кнопки во время просмотра веб-просмотра (фрагмент)

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- is-press-in-webview – PaytoN

+0

@PaytoN, что url ссылается на использование активности, а не на фрагмент. – WardaLyn

+0

Кнопка «Назад» выводит вас из текущего экрана, который вы открыли, в случае веб-представления, не имеет значения, вы находитесь на какой странице в веб-представлении, для передвигайте его только на одном экране (фрагмент или активность), поэтому, пока он отжимает его, он очищает текущий экран и возвращается, не имеет значения, к какой ссылке веб-страницы вы находитесь. –

ответ

0

Fragment не получает обратный вызов события OnBackPressed. Вам нужно будет указать ваше состояние Activity, когда ваш фрагмент будет отображаться и будет взаимодействовать между активностью и фрагментом.

Вы можете сделать свой код, на который вы вызываете ключ, например, для публичной логической функции, и если фрагмент присутствует, вы взаимодействуете с ним, вы продолжаете возвращать true или false аналогичным образом, что позволяет вам знать если вы продолжите с ним, естественно, если больше страниц не появится.

Смежные вопросы