我是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);
}
}
我该怎么做才能解决这个问题?
1条答案
按热度按时间ffscu2ro1#
你的代码看起来是正确的。但是尝试从This属性中删除
android:animateLayoutChanges="true"
属性会干扰状态恢复过程。在TabActivity中,覆盖onBackPressed()方法,并在完成Activity之前将WebView从其父容器中移除。