@@ -17,19 +17,28 @@ class ViewPagerAdapter() : Adapter<ViewPagerViewHolder>() {
1717 override fun onBindViewHolder (holder : ViewPagerViewHolder , index : Int ) {
1818 val container: FrameLayout = holder.container
1919 val child = getChildAt(index)
20- holder.setIsRecyclable(false )
2120
2221 if (container.childCount > 0 ) {
2322 container.removeAllViews()
2423 }
2524
2625 if (child.parent != null ) {
27- (child.parent as FrameLayout ).removeView(child)
26+ (child.parent as ViewGroup ).removeView(child)
2827 }
2928
3029 container.addView(child)
3130 }
3231
32+ override fun onViewRecycled (holder : ViewPagerViewHolder ) {
33+ super .onViewRecycled(holder)
34+ holder.container.removeAllViews()
35+ }
36+
37+ override fun onFailedToRecycleView (holder : ViewPagerViewHolder ): Boolean {
38+ holder.container.removeAllViews()
39+ return true
40+ }
41+
3342 override fun getItemCount (): Int {
3443 return childrenViews.size
3544 }
@@ -45,17 +54,16 @@ class ViewPagerAdapter() : Adapter<ViewPagerViewHolder>() {
4554
4655 fun removeChild (child : View ) {
4756 val index = childrenViews.indexOf(child)
48-
57+
4958 if (index > - 1 ) {
5059 removeChildAt(index)
5160 }
5261 }
5362
5463 fun removeAll () {
55- for (index in 1 .. childrenViews.size) {
56- val child = childrenViews[index- 1 ]
57- if (child.parent?.parent != null ) {
58- (child.parent.parent as ViewGroup ).removeView(child.parent as View )
64+ for (child in childrenViews) {
65+ if (child.parent != null ) {
66+ (child.parent as ViewGroup ).removeView(child)
5967 }
6068 }
6169 val removedChildrenCount = childrenViews.size
@@ -64,7 +72,11 @@ class ViewPagerAdapter() : Adapter<ViewPagerViewHolder>() {
6472 }
6573
6674 fun removeChildAt (index : Int ) {
67- if (index >= 0 && index < childrenViews.size) {
75+ if (index >= 0 && index < childrenViews.size) {
76+ val child = childrenViews[index]
77+ if (child.parent != null ) {
78+ (child.parent as ViewGroup ).removeView(child)
79+ }
6880 childrenViews.removeAt(index)
6981 notifyItemRemoved(index)
7082 }
0 commit comments