Ich versuche es meinen Benutzern ermöglicht, auf einen Beitrag zu klicken und sowohl auf neuere/ältere Beiträge nach oben und unten zu scrollen, und beim Scrollen in ältere Post funktioniert einwandfrei, wenn Sie versuchen, das Scrollen auf neuere Beiträge zu implementieren, startet es Ein bisschen seltsam handeln und ich kann nicht herausfinden, warum.
Hier ist meine aktuelle Implementierung des Adapters: < /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>
Die meisten Dinge hier funktionieren gut. Die Modale, die zum Erstellen der Fragmente verwendet werden, werden auch innerhalb der Fragmente selbst verändert, sodass die zukünftige Belastung schneller sein wird. In den Modalen gibt es auch einige Werte, mit denen die Daten zum Laden des Fragments selbst benötigt werden. Sobald das Fragment an der Position 0 beendet ist, wird das Laden der Methode 'FirstItemload ()' aufgerufen. Das Problem, mit dem ich jetzt ausgesetzt bin, ist, dass sich beim Scrollen, um einen neueren Beitrag zu laden, seltsamerweise beginnt, nämlich den Posten über dem aktuellen, sowohl zum Start als auch zum Ende des Pagers hinzugefügt wird. Wenn ich später zu dieser Seite nach unten scrolle, wenn ich sie erreichte, kann ich wieder nach oben scrollen, aber es wirkt so, als wäre ich tatsächlich bei diesem Beitrag, so dass scrolling zu noch neueren Beiträgen, wobei sie auch ein paar Elemente unten kopiert werden.
Eine andere Version von 'FirstItemloaded ()' Ich habe verwendet: < /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>
, was ähnliche Probleme wie die erste hat, außer dass es auch die Scroll -Richtung für die kopierten Elemente sowie einige der früheren Elemente kopiert.
Ich habe auch verwendet '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>
Diese Version scrollen mich scheinbar zurück zu meinem aktuellen Beitrag und kopiert ihn nach dem Scrollen nach unten auf der Liste, die derzeit geladen wird, die Beiträge sind erneut geladen. Umgekehrte Reihenfolge, aber sobald Sie versuchen, zu dem doppelten Beitrag zurückzukehren, werden sie nicht mehr dupliziert. Die Liste ist durcheinander>
So erstellen Sie einen dynamischen bidirektionalen Adapter für ViewPager2 in Android ⇐ Android
-
- Similar Topics
- Replies
- Views
- Last post