Cordova webview inside Android Fragment on Cordova 4.0

前端 未结 3 1491
迷失自我
迷失自我 2021-02-08 06:46

I just upgraded to cordova 4.0 for android. I used the following post to load a cordova webview inside a fragment..

https://github.com/Adobe-Marketing-Cloud-Apps/app-sa

3条回答
  •  不思量自难忘°
    2021-02-08 07:27

    Not sure if this is correct, but I got it working by copying some of the code from the new 4.0 CordovaActivity.java file into my fragment to setup the CordovaWebView manually.

    Step 1. Remove CordovaWebView xml tag in layout.

    Step 2. Add in following code to fragment to manually create CordovaWebView and inject it into fragment.

    private CordovaWebView webView;
    
    // Read from config.xml:
    protected CordovaPreferences preferences;
    protected String launchUrl;
    protected ArrayList pluginEntries;
    protected CordovaInterfaceImpl cordovaInterface;
    
    
    protected void loadConfig() {
        ConfigXmlParser parser = new ConfigXmlParser();
        parser.parse(getActivity());
        preferences = parser.getPreferences();
        preferences.setPreferencesBundle(getActivity().getIntent().getExtras());
        preferences.copyIntoIntentExtras(getActivity());
        launchUrl = parser.getLaunchUrl();
        pluginEntries = parser.getPluginEntries();
        // Config.parser = parser;
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        LayoutInflater localInflater = inflater.cloneInContext(new CordovaContext(getActivity(), this));
    
        View v = localInflater.inflate(R.layout.dialog_webview, container, false);
    
        cordovaInterface =  new CordovaInterfaceImpl(getActivity());
        if(savedInstanceState != null)
            cordovaInterface.restoreInstanceState(savedInstanceState);
    
        loadConfig();
    
        webView = new CordovaWebViewImpl(CordovaWebViewImpl.createEngine(getActivity(), preferences));
    
        webView.getView().setId(100);
        RelativeLayout.LayoutParams wvlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.FILL_PARENT);
        wvlp.addRule(RelativeLayout.BELOW,R.id.DialogTopBar);
        webView.getView().setLayoutParams(wvlp);
    
        if (!webView.isInitialized()) {
            webView.init(cordovaInterface, pluginEntries, preferences);
        }
        cordovaInterface.onCordovaInit(webView.getPluginManager());
        // webView = (SystemWebView)v.findViewById(R.id.myWebView);
    
        // Config.init(getActivity());
        ((RelativeLayout)v).addView(webView.getView());
    }
    

提交回复
热议问题