Używam ActionBarSherlock (który jest w zasadzie rozszerzeniem pakietu wsparcia dla systemu Android).ViewPager + FragmentStatePagerAdapter: ViewPager przestaje działać po zmianie orientacji ekranu
co usiłuję zrobić jest następujący:
Mam FragmentActivity
które odbywają się tylko jeden ViewPager
. Ten ViewPager
ma FragmentStatePagerAdapter
(ponieważ w przyszłości będzie wiele elementów). Ale na razie jest po prostu załadowany 2 elementami do testowania.
Wszystko działa dobrze, gdy jestem w orientacji pionowej. Ale kiedy zmieniam orientację poziomą, przełącza się z powrotem do pierwszego elementu w adapterze (co jest w porządku, ponieważ wszystko jest ponownie ładowane itp.), Ale nie jestem w stanie przeskoczyć do następnego elementu. Nic się nie dzieje.
Po debugowaniu widzę, że Loader
zwraca dokładnie dwa elementy. getItem(...)
jest również wywoływana z position
0 i 1. Tak więc wszystko wygląda dobrze, z wyjątkiem tego, że nie jest;)
Przy okazji: to samo dzieje się na odwrót, kiedy zaczynam w orientacji poziomej i przełączam się na orientację pionową.
Wszelkie pomysły, co może być nie tak?
Oto niektóre z moich kodu:
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));
}
nie zmienia zachowania ... – Goddchen
W moim projekcie podczas inicjowania hosta tabu skomentowałem zakładkę inicjalizacji 'protected void onCreate (Bundle savedInstanceState) {this. initialiseTabHost (savedInstanceState); \t \t/* if (savedInstanceState! = Null) { mTabHost.setCurrentTabByTag (savedInstanceState.getString ("tab")); // ustaw kartę zgodnie z zapisanym stanem } * /} 'To rozwiązało dla mnie błędy orienacji w połączeniu z' android: configChanges = "orientation" ' – JackMahoney