當前位置:編程學習大全網 - 源碼下載 - 如何在fragment添加webview

如何在fragment添加webview

因為CordovaWebView 默認的初始化裏判斷了Content是不是繼承CordovaInterface,如果直接使用Fragment繼承CordovaInterface,CordovaInterface有個抽象方法getActicity ()和Fragment的相沖突了,並且Fragment的這個同名方法還是final的,無法覆蓋。

查看CordovaWebView的源碼,它是這樣實現的。

public CordovaWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {

super(context, attrs, defStyle, privateBrowsing);

if (CordovaInterface.class.isInstance(context))

{

this.cordova = (CordovaInterface) context;

}

else

{

Log.d(TAG, "Your activity must implement CordovaInterface to work");

}

this.setWebChromeClient(new CordovaChromeClient(this.cordova));

this.initWebViewClient(this.cordova);

this.loadConfiguration();

this.setup();

}

所以只要讓CordovaWebView的Content是實現CordovaInterface的接口就可以了。

實現壹個類繼承接口CordovaInterface:

private ...因為CordovaWebView 默認的初始化裏判斷了Content是不是繼承CordovaInterface,如果直接使用Fragment繼承CordovaInterface,CordovaInterface有個抽象方法getActicity ()和Fragment的相沖突了,並且Fragment的這個同名方法還是final的,無法覆蓋。

查看CordovaWebView的源碼,它是這樣實現的。

public CordovaWebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {

super(context, attrs, defStyle, privateBrowsing);

if (CordovaInterface.class.isInstance(context))

{

this.cordova = (CordovaInterface) context;

}

else

{

Log.d(TAG, "Your activity must implement CordovaInterface to work");

}

this.setWebChromeClient(new CordovaChromeClient(this.cordova));

this.initWebViewClient(this.cordova);

this.loadConfiguration();

this.setup();

}

所以只要讓CordovaWebView的Content是實現CordovaInterface的接口就可以了。

實現壹個類繼承接口CordovaInterface:

private class CordovaContext extends ContextWrapper implements CordovaInterface {

Activity activity;

protected final ExecutorService threadPool = Executors.newCachedThreadPool();

public CordovaContext(Activity activity) {

super(activity.getBaseContext());

this.activity = activity;

}

public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {

//activity.startActivityForResult(command, intent, requestCode);

}

public void setActivityResultCallback(CordovaPlugin plugin) {

//activity.setActivityResultCallback(plugin);

}

public Activity getActivity() {

return activity;

}

public Object onMessage(String id, Object data) {

return null;

}

public ExecutorService getThreadPool() {

return threadPool;

}

}

然後在Fragment的onCreateView方法裏,更改默認的LayoutInflater inflater的content;

inflater = cloneInContext(new CordovaContext(mActivity);

這樣就可以實現Fragment裏正常使用CordovaWebView。

  • 上一篇:如何在mac上搭建android開發環境
  • 下一篇:怎樣去開發壹個物流貨運APP?
  • copyright 2024編程學習大全網