Sto utilizzando uncon uno FragmentPagerAdapter
per consentire l'aggiunta e la rimozione di pagine. Ogni pagina mostra i dati ottenuti da internet.Viewpager e FragmentPagerAdapter: rimozione vista pagina
Come una nuova pagina viene aggiunta, un nuovo frammento è associato a quella pagina. I dati sono ottenuti tramite AsyncTask e visualizzati nel frammento. Quando l'utente sceglie di rimuovere una pagina, l'idea è di distruggere la pagina e il frammento associato.
In generale, tutto funziona bene. Il problema che sto vedendo è la seguente:
avete tre pagine con i dati:
[Pagina 1] [Pagina 2] [Pagina 3]
si elimina qualsiasi pagina diversa da quella precedente, ad esempio pagina 2; Page 2 scompare come desiderato:
[Pagina 1] [Pagina 3]
Si aggiunge una nuova pagina; ma invece di una nuova pagina vuota, la nuova pagina mostra i dati (vista) da pagina 3.
[Pagina 1] [Pagina 3] [Pagina 4, ma che mostra vista/dati della Pagina 3, dovrebbe essere vuoto]
il codice di rimozione pagina nella mia attività è la seguente:
// Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;
// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();
Utilizzando il debugger, mostra che il frammento viene rimosso dal FragmentManager
dopo la chiamata executePendingTransactions()
. Ma nella chiamata FrampePagerAdapters
, mAdapter.notifyDataSetChanged()
, il frammento viene aggiunto nuovamente e quindi visualizzato quando viene creata una nuova pagina.
Ho provato a utilizzare FrameStatePagerAdapter, poiché ciò dovrebbe consentire di distruggere i frammenti, ma non ha funzionato. Nel metodo getItemPosition()
di FragmentPagerAdapter, utilizzo return FragmentAdapter.POSITION_NONE;
come indicato in un altro articolo SO che ho trovato.
Sembra che la vista per quella pagina non sia stata distrutta, ma poi aggiunta nuovamente nella nuova pagina. Ho provato a utilizzare il metodo removeViewAt()
nella vista della nuova pagina, ma non ha funzionato.
Essendo nuovo a questo, sono sicuro che mi manca qualcosa ovvio ...
io non sono sicuro che si tratta di qualcosa di ovvio. Anche io sto correndo su questo problema. L'hai risolto? Potrebbe esserci una risposta qui: http://stackoverflow.com/questions/12510404/reorder-pages-in-fragmentstatepageradapter-using-getitempositionobject-object –
Puoi mostrarci il tuo metodo override: public Fragment getItem (int position) – Gomino
When stai rimuovendo un frammento, non lo rimuovi dall'adattatore. Ecco perché appare di nuovo. Devi rimuoverlo dall'adattatore (non dalla vista, ma da Item, che usi nel metodo getItem()). il quarto frammento sembra terzo perché riusa il frammento, come l'adattatore di ListView. Hai sbagliato nella logica dell'adattatore. Mostra la tua classe di adattatore –