5

Я использую 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)); 
} 

ответ

-2

Попробуйте добавить android:configChanges="orientation" проявляться внутри тега действия

+0

не меняет поведение ... – Goddchen

+0

В моем проекте, когда я инициализировал вкладку, я закомментировал инициализацию вкладки 'protected void onCreate (Bundle savedInstanceState) {this. initialiseTabHost (savedInstanceState); \t \t/* if (savedInstanceState! = Null) { mTabHost.setCurrentTabByTag (savedInstanceState.getString ("tab")); // устанавливаем вкладку в соответствии с сохраненным состоянием } * /} 'Эти решаемые ошибки для меня для меня при использовании в сочетании с' android: configChanges = "orientation" ' – JackMahoney

12

андроид: configChanges = "ориентация" работал как шарм, но я видел, что он не рекомендуется командой android (только ресурс последнего случая) ... См. здесь http://developer.android.com/guide/topics/manifest/activity-element.html#config

Я узнал, что установка: setRetainInstance (true); на onCreateView каждого фрагмента сохранился экземпляр, делающий трюк. (пожалуйста, не будем снова вызывать onActivityCreated)

+2

setRetainInstance (true); in onCreate - это решение! благодаря – passsy

Смежные вопросы