当计数相同时,如何通知PagerAdapter片段已更改?

时间:2016-02-20 19:57:04

标签: android android-fragments android-viewpager android-pageradapter

我已经在左侧构建了一个带有导航栏的应用程序,其主要内容是ViewPager

ViewPager在两个不同的视图之间滑动。

当用户从导航栏中选择某些内容时,我向ViewPager的适配器发送了一条消息(我已经尝试过FragmentPagerAdapter和FragmentStatePagerAdapter,两者都不起作用),它设置内部变量并调用notifyDatasetChanged(); < / p>

问题是getCount()方法总是返回2,所以当适配器检查数据集是否已更改时,它会看到这些项仍然是2并且不会继续调用getItem(position)。 / p>

getItem(position)根据在notifyDatasetChanged()之前设置的内部变量的值返回不同的片段;

我尝试覆盖getItemId(位置)以防寻呼机检查id,但在检查计数后似乎没有打扰。

有没有办法在调用notifyDatasetChanged()时强制适配器重建片段?

提前感谢您提供的任何帮助

编辑:这是我目前正在使用的代码:

public class ContentAdapter extends FragmentPagerAdapter {

    private ViewedSection _section = ViewedSection.Main;

    public ContentAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        ViewedScreen screen = get_screen(position);
        return screen == null ? null : FragmentFactory.GetFragment(get_screen(position));
}

    @Override
    public int getCount() {
        return 2;
    }

    private ViewedScreen get_screen(int position) {
    //code to resolve which screen will be shown according to the current position and _section
    }

    public void set_page(ViewedSection section) {
        this._section = section;
        notifyDataSetChanged();
    }
} 

因此,当用户点击NavBar项目时,我会调用((ContentAdapter)_pager.getAdapter())。set_page(section);

1 个答案:

答案 0 :(得分:2)

为此,您需要覆盖

    public int getItemPosition (Object object)

如果您不想更换片段,请返回POSITION_UNCHANGED。如果要替换片段,请返回POSITION_NONE。 (另外,您可以返回一个新位置来将片段移动到。)

常见的覆盖是

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

只会重建一切。