listview中使用listview的问题?

时间:2013-08-26 10:26:54

标签: android listview android-viewpager

我想在四个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一次只保留三个页面,如何删除第四个位置的第一个,反之亦然????

3 个答案:

答案 0 :(得分:0)

您正在instantiateItem方法中的同一父(容器)中添加不同的视图。从instantiateItem()

中删除此行
 container.addView(page);

答案 1 :(得分:0)

在这里,您将使用单个列表视图对象4次(查看寻呼机子项)。但在这方面是不可接受的。您不能多次添加单个视图对象。

此外,ViewPager一次只接受3个活着的孩子(当前可见,当前可见,在当前可见的旁边)。

所以,最好每次都创建新的listview对象

答案 2 :(得分:0)

假设您要将listAppStore的同一个实例添加到pages,我是错误的吗?

如果不是可能的错误原因。

您应该直接在适配器中初始化视图,而不是在其外部。应该只为适配器提供传递给给定位置视图的数据。