在 Android 上替换 ViewPager 中的当前 Fragment

2023-12-21

我有一个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()适配器上会更新片段,但事实并非如此。也尝试过打电话invalidate()在ViewPager没有任何影响。这Fragment仅当我转到第三个选项卡然后返回第一个选项卡时才会更新。


检查这里的答案以获得一些好的解决方案:ViewPager PagerAdapter 不更新视图 https://stackoverflow.com/questions/7263291/viewpager-pageradapter-not-updating-the-view

基本上覆盖getItemPosition在你的PagerAdapter会给你想要的效果。

public int getItemPosition(Object object) {
     return POSITION_NONE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Android 上替换 ViewPager 中的当前 Fragment 的相关文章

随机推荐