angcyo / DslTabLayout

:hearts: Android界最万能的TabLayout(不仅仅是TabLayout), 支持任意类型的item, 支持Drawable类型的指示器,智能开启滚动,支持横竖向布局等
https://github.com/angcyo/DslAdapter
MIT License
1.57k stars 148 forks source link

setCurrentItem死循环 #39

Closed scsfwgy closed 3 years ago

scsfwgy commented 3 years ago

场景模拟:首页四个tab:A、B、C、D;在B中又有三个Tab:E、F、G。现在点击A中的一个按钮,同时发出事件a,b。a定位首页的tab到B;b事件定位到B中的G。由于事件a、b是同时发出的,会存在B页面还没可见的时候就会触发b事件。这个时候setCurrentItem就会出现死循环,并且B中的定位回调失效。延时500ms执行setCurrentItem就没事。

/**设置tab的位置*/
    fun setCurrentItem(index: Int, notify: Boolean = true, fromUser: Boolean = false) {
        if (currentItemIndex == index) {
            _scrollToCenter(index, tabIndicator.indicatorAnim)
            return
        }
        val targetView = dslSelector.visibleViewList.getOrNull(index)
        if (targetView == null || ViewCompat.isLaidOut(targetView)) {
            dslSelector.selector(index, true, notify, fromUser)
        } else {
            post {
              //逻辑一直执行这里
                setCurrentItem(index, notify, fromUser)
            }
        }
    }
angcyo commented 3 years ago

2.0.3已修复

感谢反馈.