Android WebView后退按钮返回两次

时间:2015-09-04 08:38:39

标签: android webview

你好,我在这里有一个带有webview的片段:

public class ListaCanali extends Fragment {

TextView textView;
WebView webView;
ProgressBar progressBar;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v =inflater.inflate(R.layout.lista_canali,container,false);

    //Titolo Fragment
    ((MainActivity) getActivity()).setActionBarTitle("Ultimi Film Pubblicati");

    //FindViewById
    webView = (WebView) v.findViewById(R.id.webview);
    textView = (TextView) v.findViewById(R.id.textView);
    progressBar = (ProgressBar) v.findViewById(R.id.progressBar);

    //Impostazioni WebView
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setLoadsImagesAutomatically(true);
    webView.loadUrl("http://testoetraduzione.org");
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.getSettings().setAppCacheEnabled(false);
    webView.setWebViewClient(new WebClient());

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

    return v;
}

为什么当我按下后退按钮时,webview会返回两次!请给我一个正确的代码!当然我评价最好

2 个答案:

答案 0 :(得分:3)

而不是setOnKeyListener上的WebView,而是覆盖活动的onKeyDown方法。你必须处理好片段生命周期,否则它会导致崩溃。

在您的活动中获取片段的实例:

// Fragment f = instance of your fragment
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && f != null && f.canGoBack()) {
        f.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

并在片段中添加这些方法:

public boolean canGoBack() {
    return webView != null &&webView.canGoBack();
}

public void goBack() {
    if(webView != null) {
       webView.goBack();  
    }  
}

答案 1 :(得分:0)

如果我错了,请纠正我,但你甚至不需要在后退按钮上返回键盘,因为它已经配置好了!这就是为什么它会回归两次:一次是按钮的性质,一次是因为你的动作玩家