Android Webview滚动在更改当前活动并返回后不起作用

xxls0lw8  于 2023-05-27  发布在  Android
关注(0)|答案(1)|浏览(200)

我是Android新手。我创建了一个包含两个活动的应用程序。在第一个活动中,我有一个webview,在第二个活动中有设置。在我使用webview工作了一段时间,转到设置活动,然后回到第一个活动,webview滚动卡住了,不再工作。
这是包含webview的第一个活动xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/toolbar_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|enterAlways|snap">

            <myPackage.common.ui.browser_toolbar.BrowserToolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/toolbar_border"
                app:contentInsetLeft="0dp"
                app:contentInsetStart="0dp"
                app:theme="@style/ThemeOverlay.AppCompat.Dark" />

            <ProgressBar
                android:id="@+id/progress_bar"
                style="@style/Base.Widget.AppCompat.ProgressBar.Horizontal"
                android:layout_width="match_parent"
                android:layout_height="3dp"
                android:layout_weight="0.05"
                android:progressTint="@color/progressBar"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/web_tab_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context=".tab.TabActivity">

        <myPackage.common.ui.scroll_aware_refresh_layout.ScrollAwareRefreshLayout
            android:id="@+id/swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <FrameLayout
                android:id="@+id/web_view_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />
        </myPackage.common.ui.scroll_aware_refresh_layout.ScrollAwareRefreshLayout>
    </FrameLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/suggestions_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:scrollbars="vertical"
        android:visibility="gone"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <FrameLayout
        android:id="@+id/web_view_full_screen_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/fullScreenBackground"
        android:elevation="10dp"
        android:visibility="gone" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

我创建了webview并将其附加到Java中的web_view_container,如下所示:

public class TabActivity extends AppCompatActivity {

    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Toolbar toolbar = this.findViewById(R.id.toolbar);
        this.setSupportActionBar(toolbar);
        this.webView = new WebView(this);
        if (savedInstanceState != null) {
            Bundle bundle = savedInstanceState.getBundle("web_view");
            this.webView.restoreState(bundle);
        }
        ViewGroup webViewContainer = this.findViewById(R.id.web_view_container);
        webViewContainer.addView(this.webView);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        Bundle bundle = new Bundle();
        this.webView.saveState(bundle);
        outState.putBundle("web_view", bundle);
        super.onSaveInstanceState(outState);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Bundle bundle = savedInstanceState.getBundle("web_view");
        this.webView.restoreState(bundle); 
    }
}

我该怎么做才能解决这个问题?

ffscu2ro

ffscu2ro1#

你的代码看起来是正确的。但是尝试从This属性中删除android:animateLayoutChanges="true"属性会干扰状态恢复过程。在TabActivity中,覆盖onBackPressed()方法,并在完成Activity之前将WebView从其父容器中移除。

@Override
public void onBackPressed() {
    ViewGroup webViewContainer = findViewById(R.id.web_view_container);
    webViewContainer.removeView(webView);
    super.onBackPressed();
}

相关问题