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)
} })
}