为什么在cordova内部按下后退按钮WebView会关闭应用程序?

时间:2014-03-10 21:35:19

标签: android cordova android-fragments android-webview

给出两个初始化并添加在backstack片段中(其中一个我在屏幕上看到)。每个片段都有CordovaWebView作为视图。在一个网页视图中,我已将“www.google.com”加载到另一个“www.bing.com”中。现在,如果我按一个后退按钮 - 我正在等待,那个带有“www.bing.com”的片段将从堆栈中加入,我将在设备屏幕上看到谷歌站点。而不是这个,应用程序立即退出(很短的时间我可以看到google.com,但然后app完全退出)

活动的一小部分:

cordova.getActivity().getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, webViewFragmentGoogle)
.addToBackStack(null)
.commit();


cordova.getActivity().getFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, webViewFragmentBing)
.addToBackStack(null)
.commit();

片段:

public class WebViewFragment extends Fragment {

    private String mUrl = "file:///android_asset/www/main.html";
    private CordovaWebView mWebView;

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



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

        if (view != null)
            mWebView = (CordovaWebView)view; 


        Bundle bundle=getArguments(); 
        String iframeUrl = bundle.getString("iframeUrl");


        if (!mUrl.isEmpty())
        {
            mWebView.loadUrl(iframeUrl);

        }



        return view;
    }


    public void goToUrl(String url) {

        mWebView.loadUrl(url);

    }



    @Override
    public void onResume() {
        super.onResume();

        if (mWebView!= null) {
            mWebView.handleResume(true, false);
        }

    }


    @Override
    public void onPause() {
        if (mWebView != null)
        {
            mWebView.handlePause(true);
        }  
        super.onPause();
    }


    @Override
    public void onDestroy() {
        if (mWebView != null)
        {
            mWebView.handlePause(true);
            mWebView.handleDestroy();
        }  

        super.onDestroy();

    }   


}

1 个答案:

答案 0 :(得分:2)

这是因为CordovaWebView.onKeyUp()逻辑 - 它拦截你的击键并在它们上挂钩一些动作:在这种情况下,动作是:

this.cordova.getActivity().finish();

我个人也发现杀死我的活动有点干扰,特别是在我无法以任何方式配置它的情况下。有关详细信息,请查看CordovaWebView messes up with onBackPressed method in android