在Android中替换ViewPager中当前的Fragment

6

我有一个 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才会更新。

1个回答

8

在这里检查答案,可以找到一些好的解决方案:ViewPager PagerAdapter not updating the View

基本上,在您的PagerAdapter中覆盖getItemPosition将会给您所需的效果。

public int getItemPosition(Object object) {
     return POSITION_NONE;
}

谢谢!没想到覆盖一个方法会这么容易。 - kimv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接