使用WebView的DialogFragment - 处理后退按钮?

时间:2014-04-24 09:52:56

标签: android webview back-button android-dialogfragment

这应该很简单,但我找不到合适的解决方案......

我有一个DialogFragment,它包含一个包含WebView的LinearLayout。当用户在WebView中导航时,我希望他/她能够使用后退按钮返回。当他/她到达起始页面时(即不能再返回),后退按钮应关闭对话框。

我尝试了setCancelable(false)并在DialogFragments根视图(由inflate()返回的那个视图上摆弄OnKeyListener,但它似乎永远不会被调用后退按钮。我不想要涉及Activity的onBackPressed(),如果可能的话,它应该由DialogFragment处理......

1 个答案:

答案 0 :(得分:0)

到目前为止,我找到的解决方案是设置WebView的OnKeyListener,如下所示:

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

    webView = (WebView) v.findViewById(R.id.webView);
    webView.setOnKeyListener( keyListener );        

    return v;
}


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

        return false;
    }
};