XBanner数据刷新 引起的IllegalStateException: The specified child already has a parent异常

最近在使用Xbanner的时候,调用xbanner.setData(bannerList,null);方法的时候遇到一个异常 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

也就是非法状态异常,它说这个特定的child已经有一个parent了,你必须在这个parent中首先调用removeView()方法,才能继续你的内容。这里很明显这个child是一个View,一个子(child)View必须依赖于父(parent)View,如果你要使用这个child,则必须通过parent,而你如果就是硬想使用这个child,那么就得让这个child与parent脱离父子关系(即removeView())

原来之前我是在onCreate方法中只调用了一次xbanner.setData方法,所以问题没有出来,之后需要做fragment切换刷新在setUserVisibleHint(); 方法中多次调用xbanner.setData方法的时候就会出现这个异常,结合上面异常出现的原理,很明显应该是第一次xbanner添加ImageView之后存在父子关系,但是父子关系还没有解除就又调用xbanner.setData方法所以引起了非法状态异常。

知道了原因,那么解决的方法也很简单, 只需要在每次调用xbanner.setData方法之前清空一下xbanner里面的子view就可以了,if (xbanner!=null){ xbanner.removeAllViews(); }

你可能感兴趣的:(XBanner数据刷新 引起的IllegalStateException: The specified child already has a parent异常)