1

我在我的Android 项目中使用导航组件。我正在使用One Activity 模型并遵循此模型,我有 1 个Base Activity,其余都是Fragments。当我必须移回上一个片段时,
我的问题出现在按下后退按钮。我在名为WorkerAnalyticsFragment的片段中有滚动视图,如下所示。

在此处输入图像描述

中心显示的Container包含Scroll 视图作为根视图,用于在展开Order analyticsMotivation analytics以显示详细信息时滚动容器内的内容。fragment_worker_analytics的 xml 代码如下所示。

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    tools:context=".Fragment.WorkerAnalyticsFragment"
    android:background="@color/uniform_background">

    <LinearLayout
        android:id="@+id/profile_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="@dimen/profile_container_margin_top">

        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/circle_image_view_large"
            android:layout_width="@dimen/circle_image_view_large_width"
            android:layout_height="@dimen/circle_image_view_large_height"
            android:src="@drawable/example_avatar"
            android:layout_gravity="center_horizontal"/>

        <androidx.appcompat.widget.AppCompatTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/text_view_profile_name"
            android:maxLines="1"
            android:layout_gravity="center_horizontal"
            style="@style/UniformTextAppearance"/>

    </LinearLayout>

    <include layout="@layout/analytics_container" android:id="@+id/analytics_container"/>

    <include layout="@layout/order_and_report_buttons" android:id="@+id/order_and_report_buttons"/>

</LinearLayout>

</layout>

上图中间的analytics_container的xml代码在这里。

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

<ScrollView
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="350dp"
    android:layout_margin="@dimen/analytics_container_margin"
    android:background="@drawable/container_background"
    android:minHeight="350dp"
    android:scrollbars="none"
    android:padding="@dimen/analytics_container_padding">

    <LinearLayout
        android:id="@+id/analytics_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/current_order_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/text_view_current_order_status_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_view_current_order_status_text"
                android:textStyle="bold"
                style="@style/UniformTextAppearance"/>

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center">

                <LinearLayout
                    android:id="@+id/current_order_details_container"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:layout_marginTop="@dimen/step_view_margin_top"
                    android:visibility="visible">

                    <com.kofigyan.stateprogressbar.StateProgressBar
                        android:id="@+id/order_progress_bar"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:spb_maxStateNumber="four"
                        app:spb_stateDescriptionSize="@dimen/sbp_state_description_text_size"
                        app:spb_maxDescriptionLines="1"
                        app:spb_stateBackgroundColor="@color/spb_state_background_color"
                        app:spb_stateForegroundColor="@color/spb_state_foreground_color"
                        app:spb_descriptionTopSpaceIncrementer="@dimen/spb_description_top_Space_incrementer"
                        app:spb_currentStateDescriptionColor="@color/spb_current_state_description_color"
                        app:spb_stateDescriptionColor="@color/spb_state_description_color"
                        app:spb_stateNumberBackgroundColor="@color/spb_state_number_background_color"/>

                    <include layout="@layout/current_item" android:id="@+id/current_item"/>

                </LinearLayout>

                <TextView
                    android:id="@+id/empty_text_view"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="@string/no_current_order_text"
                    android:textSize="@dimen/empty_text_size"
                    android:textStyle="bold"
                    android:layout_gravity="center"
                    android:visibility="invisible"
                    android:background="@color/current_item_container_background_color"
                    style="@style/EmptyTextAppearance"
                    />

            </FrameLayout>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/profile_analytics_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginTop="@dimen/profile_container_margin_top">

            <TextView
                android:id="@+id/text_view_worker_analytics"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_view_worker_analytics_text"
                android:textStyle="bold"
                style="@style/UniformTextAppearance"/>

            <include layout="@layout/card_view_analytics_container"/>

        </LinearLayout>

    </LinearLayout>

</ScrollView>

</layout>

我有另一个名为OrderFragment的片段,当用户单击ORDER按钮时,它会出现,如上图所示。这是图片。

在此处输入图像描述

OrderFragment的代码如下所示。

<?xml version="1.0" encoding="utf-8"?>

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<LinearLayout
    android:id="@+id/stock_fragment_parent_layout_padding"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="@dimen/stock_fragment_parent_layout_padding"
    android:background="@color/uniform_background"
    tools:context=".Fragment.OrderFragment">

    <LinearLayout
        android:id="@+id/stock_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center_horizontal"
        android:orientation="vertical"
        android:layout_marginTop="@dimen/stock_container_margin_top"
        android:background="@drawable/container_background">

        <TextView
            android:id="@+id/text_view_available_stock_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/text_view_available_stock_text"
            style="@style/UniformTextAppearance"/>

        <LinearLayout
            android:id="@+id/stock_list_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/stock_list_container_margin_top">

            <include layout="@layout/recycler_view" android:id="@+id/recycler_view"/>

        </LinearLayout>

    </LinearLayout>



</LinearLayout>

</layout>

当我按下后退按钮返回到上面通过 xml 代码和图片显示的上一个WorkerAnayticsFragment时,问题就出现了,我的应用程序崩溃了。
这是我的日志猫在应用程序崩溃时显示错误。

2020-03-27 01:26:57.757 20708-20708/com.example.nibotransporti E/AndroidRuntime: FATAL EXCEPTION: 
 main
Process: com.example.nibotransporti, PID: 20708
java.lang.ClassCastException: android.view.AbsSavedState$1 cannot be cast to 
    android.widget.ScrollView$SavedState
    at android.widget.ScrollView.onRestoreInstanceState(ScrollView.java:1872)
    at android.view.View.dispatchRestoreInstanceState(View.java:17819)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3773)
    at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3781)
    at android.view.View.restoreHierarchyState(View.java:17797)
    at androidx.fragment.app.Fragment.restoreViewState(Fragment.java:574)
    at androidx.fragment.app.FragmentStateManager.restoreViewState(FragmentStateManager.java:505)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1164)
    at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2209)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1976)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1915)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1811)
    at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:427)
    at android.os.Handler.handleCallback(Handler.java:808)
    at android.os.Handler.dispatchMessage(Handler.java:101)
    at android.os.Looper.loop(Looper.java:166)
    at android.app.ActivityThread.main(ActivityThread.java:7529)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
    2020-03-27 01:26:57.799 20708-20708/com.example.nibotransporti I/Process: Sending signal. PID: 
    20708 SIG: 9

我遇到了严重的麻烦。请通过建议我一个强大的解决方案来帮助我。

4

1 回答 1

0

您的代码不完整,但我猜您使用相同的 id 进行查看。

当这个片段重建时,这些相同的 id 可能会导致问题。

可以尝试改变scrollView的id,应该可以解决

于 2020-06-24T04:20:37.023 回答