最近有一個(gè)需求翘盖,需要在網(wǎng)頁中實(shí)現(xiàn)下拉刷新功能朦蕴,這里遇到一個(gè)坑,加載網(wǎng)頁的時(shí)候
webview
向上滑動(dòng)不了了刊愚,看了一下網(wǎng)上的資料嘗試過后都沒有用踊跟,所以在這里做一下記錄,希望可以幫到大家,由于兩個(gè)控件都有滑動(dòng)的事件商玫,在向下滑動(dòng)的時(shí)候滑動(dòng)事件被SwipeRefreshLayout
控件優(yōu)先覆蓋了箕憾,這里的話可以監(jiān)聽webview
的滑動(dòng)事件對(duì)SwipeRefreshLayout
是否允許下拉刷新進(jìn)行控制。
1.layout布局
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.xxxxxx.view.MyWebView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
2.自定義Webview
得到onScrollChanged
方法的監(jiān)聽事件
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
}
public MyWebView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
public MyWebView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mScrollListener != null) {
mScrollListener.onScrollChanged(t);
}
}
public interface IScrollListener {
void onScrollChanged(int scrollY);
}
private IScrollListener mScrollListener;
public void setOnScrollListener(IScrollListener listener) {
mScrollListener = listener;
}
}
3.初始化控件調(diào)用setOnScrollListener
接口拳昌,控制可下拉刷新時(shí)機(jī)
SwipeRefreshLayout mSwipeRefresh = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh);
mMyWebview.setOnScrollListener(new ExplorerWebView.IScrollListener() {
@Override
public void onScrollChanged(int scrollY) {
if (scrollY == 0) {
//開啟下拉刷新
mSwipeRefresh.setEnabled(true);
} else {
//關(guān)閉下拉刷新
mSwipeRefresh.setEnabled(false);
}
}
});
OK袭异,我的沖突問題解決了,不過開發(fā)中同一個(gè)需求根據(jù)項(xiàng)目情況實(shí)現(xiàn)的方式也會(huì)不一樣炬藤,解決方式也會(huì)不同御铃,這里提供的是解決方法之一。