Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当计数相同时,如何通知PagerAdapter碎片已更改?_Android_Android Fragments_Android Viewpager_Android Pageradapter - Fatal编程技术网

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

Android 当计数相同时,如何通知PagerAdapter碎片已更改?,android,android-fragments,android-viewpager,android-pageradapter,Android,Android Fragments,Android Viewpager,Android Pageradapter,我构建了一个应用程序,左侧有一个导航栏,其主要内容是一个ViewPager ViewPager在两个不同的视图之间滑动 当用户从导航栏中选择某个内容时,我会向ViewPager的适配器发送一条消息(我为此尝试了FragmentPagerAdapter和FragmentStatePagerAdapter,两者都不起作用),该适配器设置一个内部变量并调用notifyDatasetChanged() 问题是getCount()方法总是返回2,因此当适配器检查数据集是否已更改时,它会看到项目仍然是2,而

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

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

当用户从导航栏中选择某个内容时,我会向ViewPager的适配器发送一条消息(我为此尝试了FragmentPagerAdapter和FragmentStatePagerAdapter,两者都不起作用),该适配器设置一个内部变量并调用notifyDatasetChanged()

问题是getCount()方法总是返回2,因此当适配器检查数据集是否已更改时,它会看到项目仍然是2,而不会继续调用getItem(position)

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

我试图覆盖getItemId(position),以防寻呼机检查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();
    }
} 

因此,当用户单击导航栏项时,我调用((ContentAdapter)_pager.getAdapter()).set_page(section)

为此,您需要覆盖

    public int getItemPosition (Object object)
如果不想替换片段,则返回
位置\u未更改
。如果要替换碎片,请返回
位置\u NONE
。(此外,您还可以返回要将片段移动到的新位置。)

常见的覆盖是

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

这将重建所有内容。

为此,您需要覆盖

    public int getItemPosition (Object object)
如果不想替换片段,则返回
位置\u未更改
。如果要替换碎片,请返回
位置\u NONE
。(此外,您还可以返回要将片段移动到的新位置。)

常见的覆盖是

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

这将重建所有内容。

当选择相应的导航抽屉项目时,是否希望
查看页面
在两个视图之间切换,或者更改添加到
PagerAdapter
片段
,从而更新并显示新的
片段
?是否可以发布一些代码,所以我可以更好地理解这个问题?我想做的是让导航栏的每个菜单项加载两个不同的片段,当选择名为play的菜单项时,viewpager将显示这两个片段,例如有一个名为main的菜单项,它将显示MenuFragment和SettingsFragment,寻呼机应该在PlayFragment和ListFragment的片段之间切换我回家后会发布我的代码为了更清晰我确实找到了一种…奇怪的解决方案,我只是想知道是否有更好的方法,当选择相应的导航抽屉项目时,是否希望
查看页面
在两个视图之间切换,或者更改
片段
,您添加到
页面编辑器
,因此它应该更新并显示新的
片段
,所以我可以更好地理解这个问题?我想做的是让导航栏的每个菜单项加载两个不同的片段,当选择名为play的菜单项时,viewpager将显示这两个片段,例如有一个名为main的菜单项,它将显示MenuFragment和SettingsFragment,寻呼机应该在PlayFragment和ListFragment的片段之间切换。我回家后会发布我的代码。为了更清晰,我确实找到了一种……奇怪的解决方案,我只是想知道是否有更好的方法