在 Android 上替换 ViewPager 中的当前片段
Replace current Fragment in ViewPager on Android
我有一个 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
class.
的实例
public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){
adapter.setLatestChannel(channel, sortType);
adapter.notifyDataSetChanged();
Log.d("x", "on channel started");
}
我原以为在适配器上调用 notifyDataSetChanged()
会更新片段,但事实并非如此。还尝试在 ViewPager
上调用 invalidate(
) 但没有任何效果。 Fragment
仅在我转到第三个选项卡时更新,然后 return 到第一个选项卡。
查看此处的答案以获得一些好的解决方案:ViewPager PagerAdapter not updating the View
基本上在 PagerAdapter
中覆盖 getItemPosition
会给你想要的效果。
public int getItemPosition(Object object) {
return POSITION_NONE;
}
我有一个 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
class.
public void startLatestChannelFragment(TempChannel channel, VideosFragment.SortType sortType){
adapter.setLatestChannel(channel, sortType);
adapter.notifyDataSetChanged();
Log.d("x", "on channel started");
}
我原以为在适配器上调用 notifyDataSetChanged()
会更新片段,但事实并非如此。还尝试在 ViewPager
上调用 invalidate(
) 但没有任何效果。 Fragment
仅在我转到第三个选项卡时更新,然后 return 到第一个选项卡。
查看此处的答案以获得一些好的解决方案:ViewPager PagerAdapter not updating the View
基本上在 PagerAdapter
中覆盖 getItemPosition
会给你想要的效果。
public int getItemPosition(Object object) {
return POSITION_NONE;
}