estoy usando ActionBarSherlock (que es básicamente una extensión del paquete de soporte de Android).ViewPager + FragmentStatePagerAdapter: ViewPager deja de funcionar cuando cambia la orientación de la pantalla
lo que estoy tratando de hacer es la siguiente:
Tengo un FragmentActivity
que alberga un solo ViewPager
. Este ViewPager
tiene un FragmentStatePagerAdapter
(porque habrá muchos artículos en el futuro). Pero por ahora solo está cargado con 2 elementos para probar.
Todo está funcionando bien mientras estoy en orientación vertical. Pero cuando cambio la orientación horizontal, vuelve al primer elemento del adaptador (lo cual está bien ya que todo se vuelve a cargar, etc.), pero no puedo pasar al siguiente elemento. Simplemente no pasa nada.
De la depuración puedo ver que el Loader
devuelve los dos artículos muy bien. getItem(...)
también se llama con position
0 y 1. Así que todo se ve bien, excepto que no lo es;)
Btw: lo mismo sucede viceversa cuando comienzo en orientación horizontal y cambio a orientación vertical.
¿Alguna idea de lo que podría estar mal aquí?
Aquí es parte de mi código:
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));
}
no cambia el comportamiento ... – Goddchen
En mi proyecto cuando inicializo el host de pestañas comenté la inicialización de pestañas 'protected void onCreate (Bundle savedInstanceState) {this. initialiseTabHost (savedInstanceState); \t \t/* if (savedInstanceState! = Null) { mTabHost.setCurrentTabByTag (savedInstanceState.getString ("tab")); // establece la pestaña según el estado guardado } * /} 'Eso me solucionó los errores de orientación cuando se usa en conjunción con' android: configChanges = "orientation" ' – JackMahoney