5

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)); 
} 

Odpowiedz

-2

spróbuj dodać android:configChanges="orientation" manifestować wewnątrz tagu aktywności

+0

nie zmienia zachowania ... – Goddchen

+0

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

12

android: configChanges = "orientacja" pracował jak czar, ale widziałem, że nie jest to zalecane przez zespół androidów (tylko zasób z ostatniego przypadku) ... Zobacz tutaj http://developer.android.com/guide/topics/manifest/activity-element.html#config

Okazało się, że wprowadzenie: setRetainInstance (true); na onCreateView każdego zatrzymanego fragmentu instancja wykonuje sztuczkę. (proszę nie zwracać uwagi, że funkcja onActivityCreated zostanie ponownie wywołana)

+2

setRetainInstance (true); w onCreate to rozwiązanie! Dzięki – passsy