我已经在左侧构建了一个带有导航栏的应用程序,其主要内容是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);
答案 0 :(得分:2)
为此,您需要覆盖
public int getItemPosition (Object object)
如果您不想更换片段,请返回POSITION_UNCHANGED
。如果要替换片段,请返回POSITION_NONE
。 (另外,您可以返回一个新位置来将片段移动到。)
常见的覆盖是
public int getItemPosition (Object object) {
return POSITION_NONE;
}
只会重建一切。