Desidero implementare un elenco di ViewPager. Ogni elemento di un ListView è ViewPager. Funziona così lontano. Il mio problema è che non riesco a mantenere lo stato di ViewPager. Ad esempio: quando cambio la pagina del primo ViewPager nell'elenco, scorri verso il basso fino a quando il primo ViewPager non è più visibile e poi scorri di nuovo verso l'alto, il primo ViewPager mostra nuovamente la sua prima pagina.Come mantenere lo stato di ViewPager in un controllo ListView?
Ho scritto due adattatori, uno per il ListView e uno per il ViewPager. Sto cercando di riciclare la vista dal parametro convertView del metodo getView in ListAdapter. Non sono sicuro se lo sto facendo bene e non ho idea di come farlo in ViewPagerAdapter.
Qualche idea?
Ecco il mio codice finora:
GetView da MyListAdapter:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mRowView = inflater.inflate(R.layout.listitem, parent, false);
}else{
mRowView=convertView;
}
switch(position){
case 0://Fussball
ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball");
ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
fussballPager.setAdapter(fussballAdapter);
break;
case 1://Handball
ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball");
ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
handballPager.setAdapter(handballAdapter);
break;
//.../
default:
//Do nothing
}
return mRowView;
}
instantiateItem da ViewPagerAdapter:
@Override
public Object instantiateItem(View pager, int position) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(position){
case 0:
oneLayout=inflater.inflate(R.layout.table_layout, null);
break;
case 1:
oneLayout=inflater.inflate(R.layout.table_layout_second, null);
break;
default:
oneLayout=inflater.inflate(R.layout.table_layout, null);
break;
}
((ViewPager)pager).addView(oneLayout, 0);
return oneLayout;
}
Grazie! :)
è necessario trovare la posizione corrente quando si muove il cercapersone cioè.) Dalla prima pagina alla pagina successiva? –
ViewPagerAdapter dovrebbe avere una funzione getPosition() o qualcosa di simile in essa. –
Grazie, Frank. Ho già pensato a una soluzione simile, ma il mio problema è quello di ottenere l'attuale posizione di ViewPager all'interno di MyListViewAdapter. Esiste un metodo chiamato getCurrentItem() che dovrebbe farlo, ma ottengo sempre "0" indietro. (Lo uso sull'oggetto del ViewPager all'interno del metodo getView) – kiberNet