Android专题

RecyclerView中调用滚动监听方法的版本容错

2021-02-26  本文已影响0人  千夜零一

遇到问题:

  RecyclerView的. setOnScrollChangeListener()方法只有在SDK >= 23时才能正常使用,在较低版本使用此方法会报错,因此需要做一下版本容错。


布局文件

 <!--类型tab-->
<com.androidkun.xtablayout.XTabLayout
                android:id="@+id/fieldTab"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginVertical="6dp"
                android:background="@color/white"
                app:xTabIndicatorColor="#2938FF"
                app:xTabIndicatorWidth="20dp"
                app:xTabSelectedTextColor="@color/black_000000"
                app:xTabSelectedTextSize="@dimen/rules_size_16"
                app:xTabTextColor="@color/black_000000"
                app:xTabTextSelectedBold="true"
                app:xTabTextSize="@dimen/rules_size_16"
                tools:ignore="MissingConstraints" />
<androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvFenceBigView"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_marginTop="12dp"
                android:visibility="@{viewModel.listSmallRecVisible?View.GONE:View.VISIBLE}"
                app:itemBinding="@{viewModel.itemBinding1}"
                app:items="@{viewModel.items}"
                app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintTop_toBottomOf="@id/fieldTypeLL"
                tools:ignore="MissingConstraints"
                tools:itemCount="3"
                tools:listitem="@layout/item_farm_situation_chart_big" />

解决方法:

  SDK >= 23时使用..setOnScrollChangeListener ()方法,而在SDK <23 时使用.addOnScrollListener,可实现同样功能。

if (Build.VERSION.SDK_INT >= 23) {   //23版本才有此方法
            rvFenceBigView.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
                val position = rvManager.findFirstVisibleItemPosition() + 1  //有个全部,所以位置+1
                fieldTab.setScrollPosition(position, 0f, true)
                Log.d("test == position === ", "$position")
            }
 } else {
            rvFenceBigView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
                override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                    super.onScrollStateChanged(recyclerView, newState)
                    val position = rvManager.findFirstVisibleItemPosition() + 1
                    fieldTab.setScrollPosition(position, 0f, true)
                } })
 }
上一篇下一篇

猜你喜欢

热点阅读