Ho un ViewPager
e devo sostituire il primo Fragment
se si verifica una determinata azione.Sostituisci frammento corrente in ViewPager su Android
public static class PagerAdapter extends FragmentStatePagerAdapter{
private TempChannel latestChannel;
private VideosFragment.SortType sortType;
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
if(latestChannel == null) {
return new LatestVideosFragment();
}else{
return VideosFragment.getVideosFragment(latestChannel, sortType);
}
case 1:
return new LiveVideosFragment();
case 2:
return new ConversationsFragment();
}
return null;
}
}
Fondamentalmente, quando fa clic su un canale nel LatestVideosFragment
, la prima posizione nella adattatore deve cambiare a un'istanza della classe VideosFragment
.
public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){
adapter.setLatestChannel(channel, sortType);
adapter.notifyDataSetChanged();
Log.d("x", "on channel started");
}
ho pensato che chiamando notifyDataSetChanged()
sull'adattatore avrebbe aggiornare il frammento, ma non è così. Ho anche provato a chiamare invalidate(
) su ViewPager
senza alcun effetto. Lo Fragment
viene aggiornato solo se si passa alla terza scheda e si ritorna al primo.
Grazie! Non immaginavo sarebbe stato così facile da ignorare un metodo – kimv