问题描述
我试图用SwipeRefreshLayout与web视图。
I'm trying to use SwipeRefreshLayout with WebView.
我现在面临的问题,即在页面的中间,当用户滚动下来,意外刷新踢
I'm facing the problem where in the middle of page, when user scrolls down, unwanted refresh kicks in.
如何让我的刷新事件仅发生在web视图的滚动位置位于顶部。 (例如,他在看网页的顶部)?
How do I make the refresh event only happen when webview's scroll position is at the top. (ie, he's looking at the top portion of the page)?
推荐答案
我觉得这样做的推荐方法是延长 SwipeRefreshLayout
并覆盖 canChildScrollUp()
- https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#canChildScrollUp()
I think the recommended way of doing this is to extend the SwipeRefreshLayout
and override canChildScrollUp()
- https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#canChildScrollUp()
这是它是如何在谷歌IO 2014年计划完成的应用程序 - https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/MultiSwipeRefreshLayout.java#L76
This is how it's done in the Google IO 2014 Schedule app - https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/MultiSwipeRefreshLayout.java#L76
在 CustomSwipeRefreshLayout
大概是这样的:
public class CustomSwipeRefreshLayout extends SwipeRefreshLayout {
private CanChildScrollUpCallback mCanChildScrollUpCallback;
public interface CanChildScrollUpCallback {
boolean canSwipeRefreshChildScrollUp();
}
public void setCanChildScrollUpCallback(CanChildScrollUpCallback canChildScrollUpCallback) {
mCanChildScrollUpCallback = canChildScrollUpCallback;
}
@Override
public boolean canChildScrollUp() {
if (mCanChildScrollUpCallback != null) {
return mCanChildScrollUpCallback.canSwipeRefreshChildScrollUp();
}
return super.canChildScrollUp();
}
}
而在你的活动
具有的WebView
,
public class FooActivity
implements CustomSwipeRefreshLayout.CanChildScrollUpCallback {
private CustomSwipeRefreshLayout mRefreshLayout;
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// after initialization
mRefreshLayout.setCanChildScrollUpCallback(this);
}
@Override
public boolean canSwipeRefreshChildScrollUp() {
return mWebview.getScrollY() > 0;
}
}
这篇关于SwipeRefreshLayout +的WebView当滚动位置的上方的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!