`
vocaloid
  • 浏览: 32710 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

ViewPager 出现重复添加View问题

阅读更多

在使用中ViewPager和GridView整合做一个自定义UI时,在PagerAdapter重载方法instantiateItem()中出现异常

 

报错code为:

@Override
		public Object instantiateItem(View arg0, int arg1) {

			((ViewPager) arg0).addView(mListViews.get(arg1), 0); //此句报错。

			return mListViews.get(arg1);

		}

 

具体问题为:

 

java.lang.IllegalStateException The specified child already has a parent. You must call removeView() on the child's parent first.

 

 

查阅相关信息后发现错误原因为指定要添加的view已经被设置了parent,如果要添加就必须先解除原parent的联系.观察Exception错误栈发现导致这一步是因为ViewPager执行setCurrentItem(index)方法时会间接调用到instantiateItem()方法,具体原因未知。

 

修改代码,先判断需要添加的view是否有parent再做add操作,bug解除:

@Override
		public Object instantiateItem(View arg0, int arg1) {
			try {
				if(mListViews.get(arg1).getParent()==null){
					((ViewPager) arg0).addView(mListViews.get(arg1), 0);
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return mListViews.get(arg1);

		}

 

不过这只是暂时的解决方法,还需要再熟悉viewpager的具体执行机制才能避免这类错误再发生。

分享到:
评论
1 楼 yuehuaray 2013-08-16  
如果循环滚动,这样会导致白屏幕

相关推荐

    ViewPager引导页

    引导页通常在用户首次打开应用时出现,目的是向用户介绍应用的主要功能或特性,帮助他们更好地理解和使用应用。引导页通常由一系列静态图片或动态效果组成,每一页对应一个功能点。 **3. 实现步骤** (1) **添加...

    Android中ViewPager常用功能6----viewpager和Fragment结合时懒加载

    本篇文章将详细讲解如何在ViewPager与Fragment结合时实现懒加载,以解决在切换Fragment时不必要的重复加载问题。 一、ViewPager与Fragment的基础知识 ViewPager允许用户在水平滑动时切换不同的页面,每个页面通常由...

    ViewPager 的几个辅助类

    7. **SmartFragmentStatePagerAdapter**: 这是一个第三方库提供的优化版FragmentStatePagerAdapter,解决了Fragment懒加载和恢复状态的问题。在某些情况下,系统默认的FragmentStatePagerAdapter可能会导致内存泄漏...

    viewpager循环滑动自动滑动

    `ViewPager` 是Android Support Library中的组件,它可以承载多个Fragment或View,并且提供了平滑的左右滑动切换效果。`ViewPager` 内部通过`PagerAdapter` 来管理页面内容,`PagerAdapter` 负责创建和销毁页面,...

    android Viewpager

    `ViewPager`是Android Support Library的一部分,它提供了一个优雅的方式来处理多个碎片(Fragment)或视图(View)。每个页面都可以单独进行布局设计,用户可以左右滑动来浏览不同的页面。`ViewPager`不仅提供了...

    viewpager左右滑动+图片点击切换

    首先,`ViewPager`是Android Support Library中的一个视图容器,它可以显示多个`Fragment`或`View`,并且支持用户通过手势左右滑动来切换页面。在`ViewPager`中,我们可以使用`PagerAdapter`或其子类(如`...

    viewpager实现页面切换demo

    首先,ViewPager是Android Support Library中的一个控件,它允许用户通过左右滑动来查看多个视图(View)或者Fragment。为了实现这个功能,我们需要创建一个适配器(Adapter),它负责为ViewPager提供页面内容。通常...

    android viewpager左右无限滑动

    例如,我们可以创建一个继承自`ViewPager`的子类,重写`onMeasure()`方法以处理无限滚动时可能出现的尺寸问题,或者覆盖`isUserInputEnabled()`以防止在达到边界时阻止用户的输入。 5. **实例化并设置组件**: 在...

    listView添加ViewPager实现同时滑动

    在这个Adapter中,你需要为每个列表项创建并返回一个View,这个View就是包含了ViewPager的布局。 2. **设计ViewPager的布局**:在XML布局文件中,定义一个包含ViewPager的布局。ViewPager通常需要一个...

    Android 手势滑动界面(ViewPager)

    4. **适配横竖屏切换**:在横竖屏切换时,注意保存和恢复ViewPager的状态,以避免页面丢失或重复加载。 5. **异步加载数据**:在创建页面时,可以使用懒加载策略,只在页面即将显示时加载数据,以减少内存消耗。 ...

    只适应viewpager高度

    首先,我们需要创建一个新的类继承自`androidx.viewpager.widget.ViewPager`,并在这个类中添加自定义功能。例如,可以命名为`MyViewpager_FitHeight`,以匹配提供的文件名。 2. **测量和设置高度:** 在自定义的...

    android viewpager 无限滑动自带小圆点

    为了实现无限滑动,我们可以设置一个重复的数据列表,每次滑动到列表的首尾时,将数据列表的最后一个元素添加到开头,第一个元素添加到末尾,这样用户在滑动时就会感觉是无限循环的。 接下来,我们关注如何实现...

    Android ViewPager自动翻页及手动翻页后重新计时

    viewPager = findViewById(R.id.view_pager); viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager())); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @...

    Viewpager广告栏(可循环)

    - `ViewPager` 是Android SDK中的`android.support.v4.view.ViewPager` 类,用于展示一系列可以滑动的视图。它通常与`PagerAdapter` 或 `FragmentPagerAdapter` 配合使用,以加载和管理不同的页面内容。 - `...

    ViewPager控制缓存页面数量及数据懒加载

    3. **监听`ViewPager`的页面状态变化**:通过`ViewPager.addOnPageChangeListener()`添加一个`OnPageChangeListener`。在`onPageSelected(int position)`方法中,检查当前选中的页面是否需要加载数据,如果`...

    ViewPager使用与示例

    - 页面重复加载:确保在`PagerAdapter`中正确实现了`isViewFromObject(View view, Object object)`方法。 - 页面滑动卡顿:优化页面加载,减少内存消耗,考虑使用`FragmentStatePagerAdapter`代替`...

    Viewpager+Fragment实现滑动结束后加载数据

    首先,`ViewPager`是Android SDK中的一个组件,它允许用户通过左右滑动来浏览多个`View`或`Fragment`。它通过`PagerAdapter`或`FragmentPagerAdapter`来管理这些页面,根据用户的滑动行为动态加载和销毁页面,以优化...

    ViewPager+fragment(底部导航)

    4. **添加BottomNavigationView**:在布局文件中添加BottomNavigationView,并设置其菜单项,每个菜单项ID应该与ViewPager中的页面对应。 5. **关联ViewPager和BottomNavigationView**:使用`...

    Fragment+ViewPager+Tab延迟加载(懒加载)页面

    3. **监听ViewPager的滑动事件**:可以通过`ViewPager.addOnPageChangeListener()`添加一个`PageChangeListener`,在` onPageSelected()`方法中判断是否是当前选中的`Fragment`,如果是,则执行加载数据的逻辑。...

    ViewPager嵌套Fragment,懒加载处理,开源框架viewpagerindicator使用

    ViewPager viewPager = findViewById(R.id.view_pager); // 设置适配器 viewPager.setAdapter(mPagerAdapter); // 将ViewPager与Indicator关联 indicator.setViewPager(viewPager); // 设置指示器样式 indicator....

Global site tag (gtag.js) - Google Analytics