Android 从实例化项()调用notifyDataSetChanged
我需要显示一个最初只显示一个视图的ViewPager。 一旦该视图通过测量和布局过程,根据这些过程的结果,我可能需要更改适配器的内容。 在这样做的过程中,我遇到了这样一种情况:当试图从某个位置滑动到下一个项目时,ViewPager将无法跟随其移动。Android 从实例化项()调用notifyDataSetChanged,android,android-viewpager,android-pageradapter,Android,Android Viewpager,Android Pageradapter,我需要显示一个最初只显示一个视图的ViewPager。 一旦该视图通过测量和布局过程,根据这些过程的结果,我可能需要更改适配器的内容。 在这样做的过程中,我遇到了这样一种情况:当试图从某个位置滑动到下一个项目时,ViewPager将无法跟随其移动。 我确信我在适配器实现中做了一些错误的事情,但我不能指出问题所在 为了演示,我创建了一个虚拟适配器,它将模拟实际项目中发生的情况。 为了重现该问题,只需尝试一直滑动到位置2(第3项),结果是您无法通过位置1(第2项) 谢谢 public class C
我确信我在适配器实现中做了一些错误的事情,但我不能指出问题所在 为了演示,我创建了一个虚拟适配器,它将模拟实际项目中发生的情况。 为了重现该问题,只需尝试一直滑动到位置2(第3项),结果是您无法通过位置1(第2项) 谢谢
public class CustomAdapter extends PagerAdapter {
int pages = 0;
@Override
public int getCount() {
return pages;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
public void setPages(int x) {
this.pages = x;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
TextView tv = new TextView(MainActivity.this);
ViewGroup.LayoutParams lp =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(lp);
tv.setText("Position: " + position);
if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}
container.addView(tv);
return tv;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
活动(onCreate或so):
实例化item方法的位置不正确。因为它只适用于一个视图,所以它同时适用于3个视图 试着移动
if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}
在
setPrimaryItem
方法
更新:
在
setPrimaryItem
方法中,尝试调用instanceItem
方法以获得所需的位置。你可以这样做,因为实例化Item是一个公共方法。但我不知道它将如何工作,这是一个理论。试一试。实例化Item方法无法再次调用如何解决此问题?
if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}