在Android

时间:2015-10-26 09:44:32

标签: android android-fragments android-viewpager

我有一个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()会更新片段,但事实并非如此。还尝试在invalidate(上调用ViewPager},但没有任何效果。 Fragment仅在我转到第三个标签然后返回第一个标签时更新。

1 个答案:

答案 0 :(得分:6)

检查答案以获得一些好的解决方案:ViewPager PagerAdapter not updating the View

基本上覆盖getItemPosition中的PagerAdapter会给您带来理想的效果。

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