java - 将第一项滚动出屏幕后,水平 Recyclerview 跳回起始位置
问题描述
因此,我正在将 CMS 系统转换为我公司的应用程序,但我遇到了这个小错误,这让我非常恼火,我在 SO 上找不到任何符合我需求的答案。
我有一个回收站视图如下:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/extra_item_list"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@+id/add_btn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
适配器如下,输入是我从后端收到的几个视图类型。每个视图类型都会为用户弹出一个独特的布局,选择列表(来自 recyclerview 的项目)当前填充了您在适配器中看到的视图类型:
class ExtraItemAdapter(var callback: ApplicationActivity, var amount: Int, var input: Array<AllowedContentBlockTypes>, var givenPosition: Int) : RecyclerView.Adapter<ExtraItemAdapter.ViewHolder>(){
var currentPosition = 0
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.extra_item, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val positioner = input[position]
currentPosition = position
when(callback) {
is NewsChangeScreen -> {
holder.itemView.setOnClickListener {
when(positioner.type){
"text" -> {
val titleFormField = FormField()
titleFormField.id = "title"
titleFormField.label = positioner.label
titleFormField.type = positioner.type
(globalContext as NewsChangeScreen).listOfDynamicFormFields.add(titleFormField)
}
"wysiwyg" -> {
val wysiwygFormField = FormField()
wysiwygFormField.id = positioner.type
wysiwygFormField.label = positioner.label
wysiwygFormField.type = positioner.type
(globalContext as NewsChangeScreen).listOfDynamicFormFields.add(wysiwygFormField)
}
"media" -> {
val mediaFormField = FormField()
mediaFormField.id = positioner.type
mediaFormField.label = positioner.label
mediaFormField.type = positioner.type
(globalContext as NewsChangeScreen).listOfDynamicFormFields.add(mediaFormField)
}
"youtube" -> {
val youtubeFormField = FormField()
youtubeFormField.id = positioner.type
youtubeFormField.label = positioner.label
youtubeFormField.type = positioner.type
(globalContext as NewsChangeScreen).listOfDynamicFormFields.add(youtubeFormField)
}
"external_link" -> {
val externalLinkFormField = FormField()
externalLinkFormField.id = positioner.type
externalLinkFormField.label = positioner.label
externalLinkFormField.type = positioner.type
(globalContext as NewsChangeScreen).listOfDynamicFormFields.add(externalLinkFormField)
}
}
(globalContext as NewsChangeScreen).formFields.find { it.type == "mini_bm" }?.localData = (globalContext as NewsChangeScreen).listOfDynamicFormFields
callback.save.visibility = View.VISIBLE
setNewsChanges()
}
}
}
holder.itemView.item_title.text = positioner.label
when(positioner.type){
"text" -> {
holder.itemView.setBackgroundResource(R.drawable.title_item_bg)
}
"wysiwyg" -> {
holder.itemView.setBackgroundResource(R.drawable.text_block_item_bg)
}
"media" -> {
holder.itemView.setBackgroundResource(R.drawable.image_item_bg)
}
"youtube" -> {
holder.itemView.setBackgroundResource(R.drawable.youtube_item_bg)
}
"external_link" -> {
holder.itemView.setBackgroundResource(R.drawable.link_item_bg)
}
}
}
private fun setNewsChanges(){
(globalContext as NewsChangeScreen).hideExtraItemList()
(globalContext as NewsChangeScreen).rotateFabBackward()
(globalContext as NewsChangeScreen).rotated = false
(globalContext as NewsChangeScreen).dynamic_news_list.adapter?.notifyItemChanged(currentPosition)
(globalContext as NewsChangeScreen).dynamic_news_list.smoothScrollToPosition(((globalContext as NewsChangeScreen).listOfDynamicFormFields.size -1))
}
override fun getItemCount(): Int {
return amount
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
}
现在我的问题是,当我向左滚动并且第一项超出屏幕时,它会立即跳回起始位置,如果我滚动并单击非常快,我只能单击最后一项。我尝试了一些已经在 SO 上提到的东西,但它们似乎都不起作用。我认为应该有一个非常简单的解决方案,但我似乎无法自己弄清楚。
PS。我知道 notifyItemChanged 部分没有意义,但由于列表始终是我事先已经给它的项目数量,只要它小于我拥有的项目的大小,我输入的数字无关紧要。
我希望有人可以在这里帮助我!
解决方案
推荐阅读
- c++ - C++ SLList - 从堆中删除临时节点?
- python-3.x - 如何使用 tkinter 创建带有时间值的输出框
- json - NiFi:将属性合并到流文件的 JSON 内容中(不覆盖整个流文件)
- scala - Scala列表的唯一最大元素
- bash - 为什么我不能在权限为 000 的文件上使用 `$ sudo echo "hello" > file`?
- python-3.x - 如何将转换逻辑应用于字典中给定键的值
- homebrew - How can I maintain consistency between my linux shell environment and macos using homebrew?
- machine-learning - Epsilon 贪心 q 学习中的 Epsilon 和学习率衰减
- ios - NotificationCenter 是否有 didUnlockDevice 事件?
- ionic-framework - 谷歌分析没有显示任何数据