Salve a tutti, sto cercando di implementare un FragmentStatePagerAdapter, in cui ogni scheda ci dev'essere un layout diverso. Ora, tramite l'override di getItem sono riuscito a mostrare un layout diverso per ogni schermata, ma appena cerco di istanziare gli elementi del layout l'app va in crash per una NullPointerException. Inizialmente istanziavo i diversi elementi nell'onPageSelected del SimpleOnPageChangeListener, ma poi ho capito che questo veniva eseguito prima del codice in cui cambiavo layout. Allora ho provato ad agire direttamente dal Fragment rappresentante la scheda o a fare l'override di finishUpdate. Con entrambi i metodi riesco a istanziare un elemento (una TextView, come prova) e a cambiarne il testo. Sfortunatamente questo non funziona se prevedo la possibilità di diversi layout. Mi spiego. Nella classe che estende FragmentStatePagerAdapter ho creato un array di interi in cui ogni elemento è un riferimento al layout. In getItem creo il Fragment della scheda, passandogli il riferimento al layout desiderato. Se passo una posizione fissa (e quindi ogni scheda ha lo stesso layout) tutto funziona più o meno bene, altrimenti mi da una NullPointerException. Come posso fare per riuscire ad istanziare elementi diversi di layout diversi? Conviene che faccia una classe separata per ogni Fragment, e quindi per ogni scheda, oppure un layout unico in cui nascondo gli elementi che non mi servono quando cambio scheda? Ci sono altre soluzioni? Vi posto il codice della classe che estende FragmentStatePagerAdapter e di quella che estende il Fragment per la scheda.
codice:
public class CollezionePagerAdapter extends FragmentStatePagerAdapter {
private int lungArray;
private String[] arrayS;
private int[] arrayIdLayout;
private Activity act;
public CollezionePagerAdapter(FragmentManager fm,Activity a){
super(fm);
act=a;
arrayIdLayout=new int[]{R.layout.layout_1,R.layout.layout_2,R.layout.layout_3,R.layout.layout_4};
arrayS=act.getResources().getStringArray(R.array.array_titoli);
lungArray=arrayS.length;
}//CollezionePagerAdapter
@Override
public Fragment getItem(int pos){
Fragment f=new PannelloScheda(arrayIdLayout[pos]);
return f;
}//getItem
@Override
public int getCount(){
return lungArray;
}//getCount
@Override
public String getPageTitle(int pos){
return arrayS[pos];
}//getPageTitle
@Override
public void finishUpdate(ViewGroup vg){
super.finishUpdate(vg);
//chiamata al metodo per istanziare gli oggetti
}//finishUpdate
}//CollezionePagerAdapter
codice:
public class PannelloScheda extends Fragment {
private int layout;
public PannelloScheda(int l){
layout=l;
}//PannelloScheda
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle stato) {
View vPrinc = inflater.inflate(layout, container, false);
//chiamata al metodo per istanziare gli oggetti
return vPrinc;
}//onCreateView
}//PannelloScheda