Как сделать динамический двунаправленный адаптер для ViewPager2 в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как сделать динамический двунаправленный адаптер для ViewPager2 в Android

Сообщение Anonymous »

Я пытаюсь дать возможность моим пользователям нажимать на пост и прокрутить как вверх, так и вниз до новых/старых сообщений, и при прокрутке до старых сообщений работает просто отлично, когда пытается реализовать прокрутку на более новые сообщения, он начинается Действуя немного странно, и я не могу понять, почему.
Вот моя текущая реализация адаптера: < /p>
class PostScreenAdapter(private val fragmentList: ArrayList
,
private val activity: PostScreenFragmented
): FragmentStateAdapter(activity) {

override fun getItemCount(): Int {
if (fragmentList[fragmentList.size-1].sentTime != null) {
return fragmentList.size + 1
}
return fragmentList.size
}

override fun createFragment(position: Int): Fragment {
if (position < fragmentList.size && position >= 0) {
val modal = fragmentList[position]
val args = Bundle()
args.putParcelable("modal", modal)
val frag = PostScreenFragment(this)
frag.arguments = args
return frag
} else if (position == fragmentList.size) {
val modal = PostModal(fragmentList[position - 1].sentTime, true)
fragmentList.add(modal)
val args = Bundle()
args.putParcelable("modal", modal)
val frag = PostScreenFragment(this)
frag.arguments = args
return frag
} else {
TODO() // this should never happen, it is here purely so that we don't get a compile error
}
}

fun firstItemLoaded() {
if (fragmentList[0].sentTime != null) {
val newModal = PostModal(fragmentList[0].sentTime, false)
fragmentList.add(newModal)
activity.getViewPager().adapter = null
fragmentList.add(0, newModal)
this.notifyItemInserted(0)
activity.getViewPager().adapter = this
activity.getViewPager().setCurrentItem(1, false)
}
}
< /code>
Большинство вещей здесь работают просто хорошо, модалы, используемые для создания фрагментов, также изменяются в самих фрагментах, поэтому будущая нагрузка будет быстрее. В модалях также есть некоторые значения, которые используются для получения данных, необходимых для загрузки фрагмента в самих фрагмента. После того, как фрагмент в положении 0 будет выполнена, он вызовет метод «FirstIteMloaded ()». Проблема, с которой я сейчас сталкиваюсь, заключается в том, что при прокрутке, чтобы попытаться загрузить более новый пост, она начинает вести себя странно, а именно пост выше текущего, добавляется как к началу, так и к концу пейджера. Когда я позже прокручиваю эту страницу, как только я достигну, я смогу снова прокрутить вверх, но она действует так, как будто я на самом деле нахожусь в этом посте, так что прокрутка приводит к еще более новым сообщениям с ними, также скопируя пару элементов ниже.
Другая версия 'FirstIteMloaded ()' Я использовал: < /p>
fun firstItemLoaded() {
if (fragmentList[0].sentTime != null) {
// it is actually loaded
val newModal = PostModal(fragmentList[0].sentTime, false)
fragmentList.add(newModal)
fragmentList.add(0, newModal)
this.notifyDataSetChanged()
}
}
< /code>
, которые имеют аналогичные проблемы как первые, за исключением того, что он также изменяет направление прокрутки для скопированных элементов, а также копирование некоторых из более ранних элементов.
Я также использовал 'notifyIteminserted (0)': < /p>
fun firstItemLoaded() {
if (fragmentList[0].sentTime != null) {
// it is actually loaded
val newModal = PostModal(fragmentList[0].sentTime, false)
fragmentList.add(newModal)
fragmentList.add(0, newModal)
this.notifyItemInserted(0)
}
}
< /code>
Эта версия, по -видимому, прокручивает меня обратно к моему текущему сообщению и копирует его, после прокрутки вниз на нижнюю часть списка, который в настоящее время загружается, посты снова загружаются в Обратный заказ, однако, как только вы попытаетесь вернуться к дублированному посту, они больше не дублируются. список испорчен?


Подробнее здесь: https://stackoverflow.com/questions/794 ... in-android
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»