sto usando ActionBarSherlock (che è sostanzialmente un'estensione del pacchetto di supporto Android).ViewPager + FragmentStatePagerAdapter: ViewPager smette di funzionare quando cambia l'orientamento dello schermo
Quello che sto cercando di fare è la seguente:
Ho un FragmentActivity
che ospita una sola ViewPager
. Questo ViewPager
ha un FragmentStatePagerAdapter
(perché ci saranno molti articoli in futuro). Ma per ora è solo carico di 2 oggetti da testare.
Tutto funziona perfettamente mentre sono in orientamento verticale. Ma quando cambio l'orientamento orizzontale, torno al primo elemento nell'adattatore (che va bene dato che tutto viene ricaricato ecc.), Ma non riesco a scriverlo sul prossimo oggetto. Non sta succedendo nulla.
Da debug, posso vedere che lo Loader
restituisce i due elementi correttamente. getItem(...)
viene anche chiamato con position
0 e 1. Quindi tutto sembra tutto a posto, tranne che non lo è;)
A proposito: la stessa cosa sta succedendo viceversa quando inizio in orientamento orizzontale e passa all'orientamento verticale.
Qualche idea di cosa potrebbe esserci di sbagliato qui?
Ecco alcuni del mio codice:
public class QuotesStatePagerAdapter extends FragmentStatePagerAdapter {
private List<Quote> mQuotes;
public QuotesStatePagerAdapter(FragmentManager fm, List<Quote> quotes) {
super(fm);
mQuotes = quotes;
}
@Override
public Fragment getItem(int position) {
Bundle arguments = new Bundle();
arguments.putSerializable("quote", mQuotes.get(position));
QuoteFragment fragment = new QuoteFragment();
fragment.setArguments(arguments);
return fragment;
}
@Override
public int getCount() {
return mQuotes.size();
}
}
public QuotesFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void updateOrdering(ORDERING newOrdering) {
mOrdering = newOrdering;
getLoaderManager().getLoader(0).startLoading();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.quotes, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setOnPageChangeListener(this);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<List<Quote>> onCreateLoader(int id, Bundle args) {
return new QuotesLoader(getActivity(), mCategoryId);
}
@Override
public void onLoadFinished(Loader<List<Quote>> loader, List<Quote> data) {
mQuotes = data;
mViewPager.setAdapter(new QuotesStatePagerAdapter(
getSupportFragmentManager(), mQuotes));
}
non modifica il comportamento ... – Goddchen
Nel mio progetto quando inizializzo l'host della scheda ho commentato l'inizializzazione della scheda 'protected void onCreate (Bundle savedInstanceState) {this. initialiseTabHost (savedInstanceState); \t \t/* if (savedInstanceState! = Null) { mTabHost.setCurrentTabByTag (savedInstanceState.getString ("scheda")); // imposta la scheda secondo lo stato salvato } * /} 'Questo risolve gli errori di orientamento per me quando usato in congiunzione con' android: configChanges = "orientation" ' – JackMahoney