android SwipeRefreshLayout不允许WebView滚动

时间:2019-10-15 09:11:00

标签: android android-layout android-webview androidx android-swipe

正在尝试在我的WebView应用中实现android SwipeRefreshLayout。当我向下滑动时,它会刷新页面,但除滑动外,它不再允许上下滚动。

我尝试了一些在网上找到的基本修复程序,但仍然无法正常工作。

private WebView mywebview, handshakemywebview;
private SwipeRefreshLayout mySwipeRefreshLayout;
private ViewTreeObserver.OnScrollChangedListener mOnScrollChangedListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mywebview = findViewById(R.id.MainWebInterface);
    handshakemywebview = findViewById(R.id.HandShakeWebInterface);
    mySwipeRefreshLayout = this.findViewById(R.id.swipeContainer);

    mywebview.loadUrl("https://example.com");
    mySwipeRefreshLayout.setOnRefreshListener(
       new SwipeRefreshLayout.OnRefreshListener() {
          @Override
          public void onRefresh() {
             shopwebview.reload();
          }
       }
    );
}



@Override
protected  void onRestart(){
    super.onRestart();
    mySwipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
       @Override
       public void onScrollChanged() {
          if (mywebview.getScrollY() == 0) {
             mySwipeRefreshLayout.setEnabled(true);
          } else {
            mySwipeRefreshLayout.setEnabled(false);
          }
       }
    });
}

@Override
protected void onPause(){
   super.onPause();
  mySwipeRefreshLayout.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);
}

布局XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/swipeContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:background="@color/colorPrimary"
            android:contentDescription="@string/activityLabel"
            android:visibility="visible"
            android:id="@+id/MainWebInterface"/>
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

    <WebView
        android:id="@+id/HandShakeWebInterface"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:background="@color/colorPrimary"
        android:visibility="gone" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

在swiperefreshlayout中添加NestedScrollView。您可以像这样在Swipe Refesh布局中包装webview

  <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
            android:id="@+id/swipeContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent">


            <androidx.core.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <WebView
                    android:id="@+id/MainWebInterface"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:background="@color/colorPrimary"
                    android:contentDescription="@string/activityLabel"
                    android:visibility="visible" />

            </androidx.core.widget.NestedScrollView>
        </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

答案 1 :(得分:-1)

在onResume中编写OnRestart代码。 这是因为您要在重新启动时添加addOnScrollChangedListener,而将onRestart称为Always

相关问题