我希望可访问性在下一个项目不在屏幕视图中时停止遍历回收器视图项目。
向右滑动(下一个元素)时,它的工作原理如上所述。如果没有可见的回收器视图项目,它将转到下一个不在回收器视图中的可访问性元素
向右滑动(上一个元素)时没有按预期工作。如果没有可见的项目。回收站视图向左滚动以显示更多可见项目。由于 reclycer 视图具有“无限”的项目列表,因此无法遍历 recycler 视图。
build.gradle
//enable view binding
buildFeatures {
viewBinding true
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?\>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FFFF"
android:importantForAccessibility="yes"
android:focusable="true"
android:orientation="vertical"\>
<TextView
android:textSize="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:importantForAccessibility="yes"
android:text="TITLE"
android:layout_gravity="center" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
android:orientation="horizontal"
android:importantForAccessibility="yes"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_blank" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="NEXT ITEM"
android:focusableInTouchMode="true"
android:textColor="@color/teal_700"
android:background="@color/black"
android:layout_gravity="center"
android:layout_marginVertical="100dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/blankView" />
</LinearLayout\>
MainActivity.kt
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
with(binding) {
recyclerView.adapter = Adapter()
val number: Int = Int.MAX_VALUE / 3 / 2
recyclerView.scrollToPosition(number)
}
}
}
class Adapter : RecyclerView.Adapter<Adapter.ViewHolder>() {
val noOfItems = 3
class ViewHolder(val binding: ItemBlankBinding) : RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(ItemBlankBinding.inflate(LayoutInflater.from(parent.context),parent, false))
}
override fun getItemCount(): Int {
return Integer.MAX_VALUE;
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val index = position % noOfItems
with(holder.binding) {
textView.text = index.toString()
root.contentDescription = "$index"
}
}
}