我想在四个viewpager页面中添加一个listview,每个页面都有不同的数据。 矢量页面=新的Vector();
pages.add(listAppStore1);
pages.add(listAppStore2);
pages.add(listAppStore3);
pages.add(listAppStore4);
ViewPager vp = (ViewPager) findViewById(R.id.viewpager);
CustomPagerAdapter adapter = new CustomPagerAdapter(AppsActivity.this,pages);
vp.setAdapter(adapter);
vp.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
}
public void onPageScrolled(int arg0, float arg1, int position) {
// TODO Auto-generated method stub
}
public void onPageScrollStateChanged(int position1) {
// TODO Auto-generated method stub
if (position1==0) {
modifydata();
myAppStore.setadapter(mStoreAdapter);
} else if (position1==1) {
modifydata();
myAppStore.setadapter(mStoreAdapter);
}else if (position1==2) {
modifydata();
myAppStore.setadapter(mStoreAdapter);
}else if (position1==3) {
modifydata();
myAppStore.setadapter(mStoreAdapter);
}
}
});
}
这里是适配器类 公共类CustomPagerAdapter扩展了PagerAdapter {
private Context mContext;
private Vector<View> pages;
public CustomPagerAdapter(Context context, Vector<View> pages) {
this.mContext=context;
this.pages=pages;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View page = pages.get(position);
container.addView(page);
return page;
}
@Override
public int getCount() {
return 3;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view.equals(object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
强制关闭后我在logcat中遇到错误 指定的子项已有父项。您必须首先在孩子的父母上调用removeView()。任何想法请!!!!! 现在我用四个listview改变了它....它只显示三页!!!第四个在哪里?如果pagerviewer一次只保留三个页面,如何删除第四个位置的第一个,反之亦然????
答案 0 :(得分:0)
您正在instantiateItem
方法中的同一父(容器)中添加不同的视图。从instantiateItem()
container.addView(page);
答案 1 :(得分:0)
在这里,您将使用单个列表视图对象4次(查看寻呼机子项)。但在这方面是不可接受的。您不能多次添加单个视图对象。
此外,ViewPager一次只接受3个活着的孩子(当前可见,当前可见,在当前可见的旁边)。
所以,最好每次都创建新的listview对象
答案 2 :(得分:0)
假设您要将listAppStore
的同一个实例添加到pages
,我是错误的吗?
如果不是可能的错误原因。
您应该直接在适配器中初始化视图,而不是在其外部。应该只为适配器提供传递给给定位置视图的数据。