agentweb功能很多,需要自己挖,作者的范例有时候没那么完整
其中上拉刷新AgentWeb自带SmartRefreshLayout,上拉转圈和下拉加载...动画。
作者例子用的是谷歌SwipeRefreshLayout和TwinklingRefreshLayout
这里仅讨论SmartRefreshLayout,其它下章再说
基础代码
mAgentWeb = AgentWeb.with(this) //这里需要把 Activity 、 和 Fragment 同时传入
.setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))
.useDefaultIndicator()//使用默认进度条
.setWebChromeClient(mWebChromeClient)
.setWebViewClient(mWebViewClient)
.setMainFrameErrorView(R.layout.agentweb_error_page, -1)
.setSecurityType(AgentWeb.SecurityType.STRICT_CHECK) //AgentWeb.SecurityType.strict 注意这里开启 strict 模式 , 设备低于 4.2 情况下回把注入的 Js 全部清空掉 , 这里推荐使用 onJsPrompt 通信
.setWebLayout(new WebLayout(this)) //下拉刷新
.setOpenOtherPageWays(DefaultWebClient.OpenOtherPageWays.ASK)//打开其他应用时,弹窗咨询用户是否前往其他应用
.interceptUnkownUrl() //拦截找不到相关页面的Scheme
.createAgentWeb()
.ready()
.go("file:///android_asset/loadpage/loading.html");
注意,声明.setWebLayout(new WebLayout(this))
然后我们找到widget/WebLayout.java修改代码为如下
public class WebLayout implements IWebLayout {
private Activity mActivity;
private final SmartRefreshLayout mSmartRefreshLayout;
private final WebView mWebView;
private Integer page;
public WebLayout(Activity activity) {
this.mActivity = activity;
this.page=0;
//指定刷新的界面样式
View mView=activity.getLayoutInflater().inflate(R.layout.fragment_srl_web,null);
View smarkView = mView.findViewById(R.id.smarkLayout);
mSmartRefreshLayout = (SmartRefreshLayout) smarkView;
mWebView = (WebView) mSmartRefreshLayout.findViewById(R.id.webView);
mSmartRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(RefreshLayout refreshlayout) {
System.out.println("来自下拉刷新");
page = 1;
mWebView.reload();
mSmartRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
mSmartRefreshLayout.finishRefresh(true);
}
}, 2000);
}
});
mSmartRefreshLayout.setOnLoadmoreListener(new OnLoadmoreListener() {
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
//mWebView.reload();
System.out.println("来自上拉分页");
page++;
String jsCode="javascript:b4anextpage("+page+");";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mWebView.evaluateJavascript(jsCode, null);
}else{
mWebView.loadUrl(jsCode);
}
mSmartRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
mSmartRefreshLayout.finishLoadmore(true);
}
}, 2000);
}
});
}
@NonNull
@Override
public ViewGroup getLayout() {
return mSmartRefreshLayout;
}
@Nullable
@Override
public WebView getWebView() {
return mWebView;
}
}
上拉加载更多数据,你还需要写一个交互的部分,比如上面的b4anextpage
<script>
function b4anextpage(page){
loaddata(page); //你的网页分页代码逻辑
}
</script>
看懂的了吗?不懂的话一起交流吧