Я использую ActionBarSherlock (который в основном является расширением пакета поддержки Android).ViewPager + FragmentStatePagerAdapter: ViewPager перестает работать при изменении ориентации экрана
Что я пытаюсь сделать, это следующее:
У меня есть FragmentActivity
в котором находится только один ViewPager
. У этого ViewPager
есть FragmentStatePagerAdapter
(потому что в будущем будет много предметов). Но на данный момент он просто загружен двумя предметами для тестирования.
Все работает нормально, пока я в портретной ориентации. Но когда я изменяю ландшафтную ориентацию, он переключается обратно на первый элемент в адаптере (это нормально, поскольку все перезагружается и т. Д.), Но я не могу выполнить swype для следующего элемента. Просто ничего не происходит.
От отладки я вижу, что Loader
вернет два предмета просто отлично. getItem(...)
также называется position
0 и 1. Так что базовое все выглядит нормально, кроме него нет;)
Btw: То же самое происходит наоборот, когда я начинаю в ландшафтной ориентации и переключаюсь на портретную ориентацию.
Любые идеи, что может быть неправильным здесь?
Вот некоторые из моего кода:
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));
}
не меняет поведение ... – Goddchen
В моем проекте, когда я инициализировал вкладку, я закомментировал инициализацию вкладки 'protected void onCreate (Bundle savedInstanceState) {this. initialiseTabHost (savedInstanceState); \t \t/* if (savedInstanceState! = Null) { mTabHost.setCurrentTabByTag (savedInstanceState.getString ("tab")); // устанавливаем вкладку в соответствии с сохраненным состоянием } * /} 'Эти решаемые ошибки для меня для меня при использовании в сочетании с' android: configChanges = "orientation" ' – JackMahoney