ViewPager Adapter генерирует исключение при изменении файла макета - PullRequest
0 голосов
/ 14 октября 2019

У меня проблема с ViewPager внутри recyclerView.

Я использую один и тот же файл макета в двух разных фрагментах.

На первом фрагменте все работает нормально. Но во втором фрагменте есть исключение, связанное с ViewPager в окне повторного просмотра.

Я пытаюсь решить проблему более трех дней безуспешно.

Я создал фрагмент два точнотот же макет и код, что и во втором фрагменте.

Чтобы избежать дальнейших проблем, во второй фрагмент я включил только код для заполнения recyclerView, но с тем же файлом макета (его копией). Я тестирую все файлы макета для второго фрагмента, добавляя представления, пока приложение не ломается с исключением. Исключением является известное исключение, когда viewPager не обновляется:

The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged

Но я не могу понять это исключение, поскольку код из фрагмента не меняется, меняется только файл макета.

Мне нужна ваша помощь, чтобы разобраться в этой проблеме.

Например, файл макета имеет несколько линейных разметок и повторное представление. Существует состояние макета, когда все работает нормально, затем, если я добавлю еще одно линейное макетирование, код фрагмента не изменится, а затем возникнет исключение.

Здесь у вас есть макет для второго фрагмента, только до состояния, когдаэто работает, если я добавляю еще одно линейное расположение, оно выдает исключение:

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


<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/dots"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"


        android:layout_marginStart="5dp"


        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/dot1"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"

            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/reddot" />

        <ImageView
            android:id="@+id/dot2"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot3"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot4"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot5"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot6"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot7"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot8"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot9"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />

        <ImageView
            android:id="@+id/dot10"
            android:layout_width="10dp"
            android:layout_height="10dp"
            android:layout_margin="3dp"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/whitedot" />


    </LinearLayout>

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="280dp"
        android:layout_marginBottom="8dp">

    </androidx.viewpager.widget.ViewPager>


    <LinearLayout
        android:id="@+id/linearbotones"
        android:layout_width="match_parent"
        android:layout_height="match_parent"


        android:layout_marginStart="5dp"
        android:layout_marginTop="5dp"
        android:layout_marginEnd="@dimen/browser_actions_context_menu_min_padding"
        android:layout_marginBottom="20dp"
        android:foregroundGravity="clip_horizontal"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/btnmuro"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/home_muro_perfil_red" />

        <ImageView
            android:id="@+id/btninfo"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/home_info_perfil" />

        <ImageView
            android:id="@+id/btngente"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/usuarios_en_spot" />

        <ImageView
            android:id="@+id/btncercanos"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:contentDescription="@string/movmap"
            app:srcCompat="@drawable/home_spots_perfil" />


    </LinearLayout>

    <LinearLayout
        android:id="@+id/zonaverified"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:gravity="end"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/ivVerified"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_marginEnd="5dp"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/home_ambassador" />

        <TextView
            android:id="@+id/txtVerified"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="3dp"
            android:layout_marginTop="5dp"
            android:layout_marginRight="3dp"
            android:text="@string/Not_verified"
            android:textColor="@color/red_400" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/txtNombre"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="35dp"
            android:layout_weight="1"
            android:ellipsize="end"
            android:maxLines="1"
            android:text="MACBA - Zona Skate Barcelona MACBA - Zona Skate Barcelona MACBA - Zona Skate Barcelona"
            android:textSize="18sp"
            android:textStyle="bold" />
    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/ivSport"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/skate" />

        <ImageView
            android:id="@+id/type1"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type2"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type3"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type4"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type5"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type6"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type7"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <ImageView
            android:id="@+id/type8"
            android:layout_width="0dp"
            android:layout_height="30dp"
            android:layout_marginTop="5dp"
            android:layout_marginEnd="5dp"
            android:layout_weight="0.5"
            android:contentDescription="@string/movmap"
            fab:srcCompat="@drawable/negocio" />

        <TextView
            android:id="@+id/textView20"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5 " />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="5dp"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/txtdistancia"
            android:layout_width="0dp"
            android:layout_height="wrap_content"

            android:layout_marginTop="20dp"
            android:layout_weight="1"
            android:text="@string/spot_at"
            android:textSize="14sp"
            android:textStyle="bold" />
    </LinearLayout>


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </androidx.recyclerview.widget.RecyclerView>

</LinearLayout>





</ScrollView>

Если я добавлю еще одно линейное расположение, как это, прямо перед recyclerView, то будет выдано исключение:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="5dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/txtdistanciados"
                android:layout_width="0dp"
                android:layout_height="wrap_content"

                android:layout_marginTop="20dp"
                android:layout_weight="1"
                android:text="@string/spot_at"
                android:textSize="14sp"
                android:textStyle="bold" />
        </LinearLayout>

Как я уже говорил, адаптер ViewPager и адаптер recyclerView одинаковы для обоих фрагментов. Использование одного и того же макета для обоих фрагментов заставляет приложение генерировать исключение. По этой причине я решил создать второй макет, добавляя линейный макет при каждом запуске теста, пока не будет сгенерировано исключение. Может быть, вы можете обнаружить проблему. Если вам нужна дополнительная информация, пожалуйста, спросите.

...