Я пытаюсь дать возможность моим пользователям нажимать на пост и прокрутить как вверх, так и вниз до новых/старых сообщений, и при прокрутке до старых сообщений работает просто отлично, когда пытается реализовать прокрутку на более новые сообщения, он начинается Действуя немного странно, и я не могу понять, почему.
Вот моя текущая реализация адаптера: < /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)
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(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(0, newModal)
this.notifyItemInserted(0)
}
}
< /code>
Эта версия, по -видимому, прокручивает меня обратно к моему текущему сообщению и копирует его, после прокрутки вниз на нижнюю часть списка, который в настоящее время загружается, посты снова загружаются в Обратный заказ, однако, как только вы попытаетесь вернуться к дублированному посту, они больше не дублируются. список испорчен?
Подробнее здесь: https://stackoverflow.com/questions/794 ... in-android
Как сделать динамический двунаправленный адаптер для ViewPager2 в Android ⇐ Android
Форум для тех, кто программирует под Android
1739667370
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)
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(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(0, newModal)
this.notifyItemInserted(0)
}
}
< /code>
Эта версия, по -видимому, прокручивает меня обратно к моему текущему сообщению и копирует его, после прокрутки вниз на нижнюю часть списка, который в настоящее время загружается, посты снова загружаются в Обратный заказ, однако, как только вы попытаетесь вернуться к дублированному посту, они больше не дублируются. список испорчен?
Подробнее здесь: [url]https://stackoverflow.com/questions/79441809/how-to-make-a-dynamic-bi-directional-adapter-for-viewpager2-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия