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?
Niestety nie jest to takie łatwe. FragmentPagerAdapter cache Fragmenty, musisz stworzyć niestandardowy PagerAdapter lub użyć jakichś sztuczek. – Matroska
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
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. –