Dynamisch entfernen Sie ein Element aus einem ViewPager mit FragmentStatePagerAdapter
Gibt es ganz wenige Diskussionen um dieses Thema
- ViewPager PagerAdapter nicht die Aktualisierung der Ansicht
- Update ViewPager dynamisch?
- Entfernen von Fragmenten aus FragmentStatePagerAdapter
Habe ich versucht verschiedene Lösungen (einschließlich der Aufhebungs-mit POSITION_NONE
)
. Aber ich noch weiß nicht, wie man ein Element löschen, richtig.
Was passiert ist
- entweder bekomme ich eine leere Seite (also das fragment ist zerstört, aber das
instantiateItem
nicht genannt wurde, für einen Ersatz) - oder das ganze stürzt ab, vermutlich, weil die Art und Weise der Android verwaltet die
fragment-Instanzen nicht übereinstimmen, wie ich halten Sie in meinem
arraylist/sparsearray
Hier s meine adapter
private class DatePickerPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> registeredFragments = new ArrayList<Fragment>();
public DatePickerPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return CreateWishFormDatePaginationFragment.newInstance(position);
}
@Override
public int getItemPosition(Object object){ //doesnt change much..
return PagerAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return iPageCount;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.add(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, registeredFragments.get(position));
}
public void removePage(ViewGroup pager, int position) {
destroyItem(pager, position, null);
registeredFragments.remove(position);
iPageCount--;
pagerIndicator.notifyDataSetChanged();
pagerAdapter.notifyDataSetChanged();
}
public void addPage() {
iPageCount++;
pagerIndicator.notifyDataSetChanged();
pagerAdapter.notifyDataSetChanged();
}
}
Ich bin mit einem view pager mit ViewPagerIndicator und ich möchte in der Lage sein, entfernen Sie eine Seite dazwischen, zum Beispiel.
Daher bleibt die Frage, was ist der richtige Weg, Umgang mit hinzufügen und entfernen von Fragmenten in einem ViewPager?
Dank!
InformationsquelleAutor Orkun Ozen | 2015-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, entfernen von Elementen aus einem
ViewPager
, der folgende code macht keinen Sinn:Im wesentlichen erstellen Sie eine
Fragment
auf der Grundlage derposition
. Egal welche Seite, die Sie entfernen, kann der Bereich desposition
aus [0,iPageCount
) zu [0,iPageCount-1
), was bedeutet, dass es immer loszuwerden, die letztenFragment
.Was Sie brauchen, ist mehr oder weniger die folgenden:
Bitte Lesen Sie dieses komplette Beispiel für mehr details über entfernen Element aus FragmentStatePagerAdapter.
Funktioniert wie ein Charme für mich, nach dem ändern eines bit-für meine genaue Verwendung Fall. Was ich besonders daran mag ist, dass die
FragmentStatePagerAdapter
'sFragmentManager
Sorge über den Zustand der einzelnenFragment
.aber dieser code @Override public int getItemPosition(Object Object) { // refresh alle Fragmente, wenn Datensatz geändert zurück PagerAdapter.POSITION_NONE; } nimmt zu viel Zeit zu entfernen, ein fragment. helfen u kann
InformationsquelleAutor Yuchen Zhong
Den ViewPager nicht entfernen Sie Ihre Fragmente mit dem code da oben, es lädt mehrere Ansichten (oder die Fragmente in Ihrem Fall) in den Speicher. Zusätzlich zu den sichtbaren anzeigen, lädt es auch die Aussicht zu beiden Seiten des sichtbaren. Dies bietet die smooth-scrolling von Ansicht zu Ansicht, dass die macht der ViewPager so cool.
Um den Effekt zu erzielen, die Sie wollen, müssen Sie ein paar Dinge.
Überschreiben der adapter-Methode getItemPosition (siehe unten). Wenn wir rufen mAdapter.notifyDataSetChanged(); ViewPager hinterfragt die adapter, um festzustellen, was sich geändert hat in Bezug auf die Positionierung. Wir verwenden diese Methode, um zu sagen, dass sich alles verändert hat, so verarbeiten Sie alle Ihre anzeigen positionieren.
Und hier ist der code...
Kopiert die Antwort von stackoverflow.com/a/10399127/377260.
yaaaaa @PaulBurke
InformationsquelleAutor Pankaj Talaviya