Я использую ActionBarSherlock (который в основном является расширением пакета поддержки Android).
Я пытаюсь сделать следующее:
У меня есть FragmentActivity
, которыйхосты только один ViewPager
.У этого ViewPager
есть FragmentStatePagerAdapter
(потому что в будущем будет много предметов).Но на данный момент в него загружено 2 элемента для тестирования.
Все работает отлично, пока я в портретной ориентации.Но когда я меняю альбомную ориентацию, он переключается обратно на первый элемент в адаптере (что нормально, поскольку все перезагружается и т. Д.), Но я не могу перейти к следующему элементу.Ничего не происходит.
Из отладки я вижу, что Loader
прекрасно возвращает два элемента.getItem(...)
также вызывается с position
0 и 1. Таким образом, в принципе все выглядит хорошо, за исключением того, что это не так;)
Кстати: то же самое происходит наоборот, когда я начинаю в альбомной ориентации и переключаюв портретную ориентацию.
Есть идеи, что здесь может быть не так?
Вот мой код:
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));
}