我有一个 ViewPager
,当发生某个特定操作时,我需要替换第一个 Fragment
。
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;
}
}
基本上,当我在LatestVideosFragment
中单击一个频道时,适配器中的第一个位置应更改为VideosFragment
类的一个实例。
public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){
adapter.setLatestChannel(channel, sortType);
adapter.notifyDataSetChanged();
Log.d("x", "on channel started");
}
我曾以为在适配器上调用notifyDataSetChanged()
会更新片段,但实际上并没有。我还试过在ViewPager
上调用invalidate()
,但没有任何效果。只有当我切换到第三个选项卡然后返回第一个选项卡时,Fragment
才会更新。