Sto utilizzando uno ViewPager
con un PagerFragmentAdapter
personalizzato che utilizza un elenco interno per fornire i frammenti. Vorrei aggiungere e rimuovere i frammenti in modo dinamico sulle modifiche alle impostazioni.Aggiunta e rimozione di frammenti dinamicamente in ViewPager
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new ServicePagerAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
Ho provato a richiamare il setAdapter
ma ottenere una IllegalStateException (Can not perform this action after onSaveInstanceState)
.
Come posso raggiungere il mio scopo?
Sfortunatamente non è così facile. FragmentPagerAdapter memorizza nella cache i frammenti, devi creare un PagerAdapter personalizzato o utilizzare alcuni trucchi. – Matroska
nell'esempio di codice menzioni 'ServicePagerAdapter' - questa non è una classe di libreria, quindi ho pensato che tu stia già usando un adattatore personalizzato. Quindi sì, è necessaria l'implementazione personalizzata della classe 'PagerAdapter'. Per quanto riguarda la tua domanda principale, penso che sia stata data risposta. – HitOdessit
Non è sufficiente chiamare notifyDataSetChanged() sul PagerAdapter se gli elementi sono stati rimossi. È necessario anche sovrascrivere il metodo getItemPosition di PagerAdapter. Ritorna POSITION_UNCHANGED se l'elemento è ancora lì o POSITION_NONE se è stato rimosso. –