2011-10-26 25 views
5

Używam ViewPager z niestandardowym PagerFragmentAdapter, który używa wewnętrznej listy do dostarczania fragmentów. Chciałbym dodawać i usuwać fragmenty dynamicznie przy zmianach ustawień.Dodawanie i usuwanie fragmentów dynamicznie w ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

Próbowałem zadzwonić ponownie setAdapter ale uzyskanie IllegalStateException (Can not perform this action after onSaveInstanceState).

Jak osiągnąć mój cel?

Odpowiedz

2

Za każdym razem nie trzeba resetować swojego ServicePagerAdapter. Wystarczy utworzyć i ustawić go raz w metodzie onCreate() swojej (lub w metodzie onActivityCreated() twojego Fragment), a następnie możesz po prostu wywołać metodę add() adaptera, aby dodać do niej nowe elementy. Ale nie zapomnij zadzwonić pod numer notifyDataSetChanged() po każdym dodaniu do adaptera.

+0

Niestety nie jest to takie łatwe. FragmentPagerAdapter cache Fragmenty, musisz stworzyć niestandardowy PagerAdapter lub użyć jakichś sztuczek. – Matroska

+0

w kodzie przykładowym wymieniłeś 'ServicePagerAdapter' - nie jest to klasa biblioteki, więc założyłem, że już korzystasz z niestandardowego adaptera. Więc tak, potrzebujesz niestandardowej implementacji klasy 'PagerAdapter'. Jeśli chodzi o główne pytanie - myślę, że na to odpowiedziano. – HitOdessit

+2

Nie wystarczy wywoływać metodę notifyDataSetChanged() na PagerAdapter, jeśli elementy zostały usunięte. Musisz także nadpisać metodę getItemPosition w PagerAdapter. Zwróć POSITION_UNCHANGED, jeśli element nadal tam jest, lub POSITION_NONE, jeśli został usunięty. –

Powiązane problemy