Replace current Fragment in ViewPager on Android
11,515
Check the answers here for some good solutions: ViewPager PagerAdapter not updating the View
Basically overwriting getItemPosition
in your PagerAdapter
will give you the desired effect.
public int getItemPosition(Object object) {
return POSITION_NONE;
}
Author by
kimv
Updated on July 15, 2022Comments
-
kimv almost 2 years
I have a
ViewPager
and I have to replace the firstFragment
if a certain action happens.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; } }
Basically, when I click a channel in the
LatestVideosFragment
, the first position in the adapter should change to an instance of theVideosFragment
class.public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){ adapter.setLatestChannel(channel, sortType); adapter.notifyDataSetChanged(); Log.d("x", "on channel started"); }
I assumed that calling
notifyDataSetChanged()
on the adapter would update the fragment, but it does not. Also tried callinginvalidate(
) on theViewPager
without any effect. TheFragment
is updated only if I go to the third tab, and then return to the first. -
kimv over 8 yearsThanks! Did not imagine it would be so easy as to override a method