2012-05-16 8 views
9

ho questo PageAdapter con giorni della settimana, per ogni pager ho lo stesso layout. Il mio problema è come aggiornare il listView giusto quando cambia il giorno. Quando cambio il giorno, il cercapersone crea un nuovo cercapersone ed elimina altro, quando questo è accaduto il mio listview punta al nuovo cercapersone ma non al corrente. Ad esempio, è mercoledì e io salvo il riferimento listview, quando cambio per martedì il lunedì il cercapersone viene creato e giovedì eliminato, e il mio punto di riferimento per l'ultima pagina viene creato (lunedì), ma io sono martedì.Come aggiornare il contenuto di ViewPager?

mio 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; 
} 

voglio il ListView puntare sempre alla ListView della voce corrente.

+0

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

risposta

39

leggere questo post: PagerAdapter

È possibile implementare questa funzione in PagerAdapter:

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

dopo, è possibile utilizzare questa funzione:

yourPagerAdapterObject.notifyDataSetChanged(); 

Questo metodo è male se si dispone di troppe viste da visualizzare. Tutte le visualizzazioni vengono sempre ricalcolate. Ma nel tuo caso, per alcuni punti di vista, va bene.

+0

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

5

L'override di getItemPosition in PagerAdapter è più semplice, ma leggermente più inefficiente. In questo modo, quando si chiama notifyDataSetChanged(), il pager della vista rimuoverà tutte le viste e le ricaricherà tutte. Come così si ottiene l'effetto di ricarica. Un'altra opzione che è suggested by alvarolb, è il metodo setTag() in instantiateItem() durante l'istanziazione di una nuova vista. Quindi, anziché utilizzare notifyDataSetChanged(), è possibile utilizzare findViewWithTag() per trovare la vista che si desidera aggiornare.

Problemi correlati