I'm new to android. I created an application with two activities. In the first activity I have a webview and in second activity there is settings. after I worked with webview for a while and go to settings activity then comeback to first activity, webview scroll get stuck and does not work anymore.
this is first activity xml including webview:

<?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>

我在Java中创建webview并将其附加到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); 
    }
}

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

推荐答案

您的代码看起来是正确的.但是try 从This属性中删除android:animateLayoutChanges="true"属性可能会干扰状态恢复过程.在您的TabActivity中,重写onBackPressed()方法,并在完成活动之前从其父容器中删除WebView.

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

Android相关问答推荐

在Android Studio中陷入了不兼容的Gradle版本的循环

Android Compose Lazy柱形实时UI更改

如何使用Jetpack Compose使水平pager 显示离屏页面?

使用Retrofit2的API调用:我如何能够一直进行API调用,以更新数据而无需重新打开应用程序

避免在按下肯定按钮时自动取消AlertDialog

如何将两个变量传递给Nav主机,然后将其传递给另一个屏幕?

为什么Kotlin允许将非空值类型化为可空类型,但又将其视为非空值?

如何在 compose android中将图像覆盖在另一个图像上

我可以从 Android 中的选定文本中获取周围的文本吗?

在 kotlin 中动态添加 GridView

如何在一个活动中预加载图像然后在另一个活动中加载它们?

Jetpack Compose 动画的行为是什么?

在 Jetpack Compose 中包装内容

自定义 Compose Arrangement 以在 LazyRow/LazyColumn 的开头和结尾添加额外的间距

Jetpack Compose - 每次点击按钮都不起作用

没有互联网连接时,Firebase Storage putFile() 永远不会完成

插入查询室 OnConflictStrategy.REPLACE

在jetpack compose中将图像添加到脚手架顶部栏

如何将房间数据库导出到 .CSV

Android 模拟器没有响应 Xamarin 的 AMD 进程的问题