У меня проблема с 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 одинаковы для обоих фрагментов. Использование одного и того же макета для обоих фрагментов заставляет приложение генерировать исключение. По этой причине я решил создать второй макет, добавляя линейный макет при каждом запуске теста, пока не будет сгенерировано исключение. Может быть, вы можете обнаружить проблему. Если вам нужна дополнительная информация, пожалуйста, спросите.