2012-05-16 8 views
9

Ich habe diese PageAdapter mit Tagen der Woche, für jeden Pager habe ich das gleiche Layout. Mein Problem ist, wie man das rechte listView aktualisiert, wenn man den Tag ändert. Wenn ich den Tag ändere, an dem der Pager einen neuen Pager erstellt und einen anderen löscht, dann zeigt mein Listeneintrag auf einen neuen Pager, aber nicht auf den aktuellen. Zum Beispiel, ist wedneyday und ich speichern Listenansicht Referenz, wenn ich für Dienstag ändern der Montag Pager erstellt und Donnerstag gelöscht wird, und meinen Bezugspunkt auf die letzte Seite erstellen (Montag), aber ich bin am Dienstag.Wie kann ich den Inhalt von ViewPager aktualisieren?

Mein Pageadapter:

ListView lvwConfig; 

@Override 
public Object instantiateItem(View pager, int position) { 
    LayoutInflater inflater = (LayoutInflater) mContext 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflater.inflate(R.layout.pager_layout, null); 
    lvwConfig = (ListView) v.findViewById(R.id.lvwConfig); 
    ((ViewPager) pager).addView(v, 0); 

    return v; 
} 

ich auf die ListView wollen immer nach Listenansicht des aktuellen Elements.

+0

http://stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-changed-in-a –

Antwort

39

Lesen Sie diesen Beitrag: PagerAdapter

Sie können diese Funktion in PagerAdapter implementieren:

public int getItemPosition(Object object){ 
    return POSITION_NONE; 
} 

nach, können Sie diese Funktion verwendet werden:

yourPagerAdapterObject.notifyDataSetChanged(); 

Diese Methode ist schlecht, wenn Sie zu viele Ansichten, um anzuzeigen. Alle Ansichten werden immer neu berechnet. Aber in Ihrem Fall, für einige Ansichten, ist es in Ordnung.

+0

finden Sie in der Post http : //stackoverflow.com/questions/33012056/view-pager-first-and-second-fragment-data-is-not-updating-when-data-change-in-a- –

5

Das Überschreiben von getItemPosition in PagerAdapter ist einfacher, aber etwas ineffizienter. Auf diese Weise, wenn Sie notifyDataSetChanged() aufrufen, wird der Ansichtspager alle Ansichten entfernen und alle neu laden. So wird der Reload-Effekt erhalten. Es gab eine andere Option, suggested by alvarolb, ist setTag() Methode in instantiateItem() bei der Instanziierung einer neuen Ansicht. Anstatt notifyDataSetChanged() zu verwenden, können Sie findViewWithTag() verwenden, um die Ansicht zu finden, die Sie aktualisieren möchten.

Verwandte Themen