【发布时间】:2018-06-13 15:38:19
【问题描述】:
我有以下 RecyclerView.Adapter:
class SpeciesAdapter(val activity: Activity, private val species: ArrayList<Specie>) : RecyclerView.Adapter<SpeciesAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, position: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(inflater.inflate(R.layout.specie_item, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val specie = species[position]
holder.specie.text = specie.name
holder.header.setOnClickListener {
if (holder.information.visibility == View.GONE) showInformation(holder)
else hideInformation(holder)
}
}
private fun showInformation(holder: ViewHolder) {
holder.information.visibility = View.VISIBLE
holder.arrow.rotation = -90f
}
private fun hideInformation(holder: ViewHolder) {
holder.information.visibility = View.GONE
holder.arrow.rotation = 90f
}
override fun getItemCount() = species.size
class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val header: RelativeLayout = view.header_layout
val arrow: ImageView = view.arrow_image
val specie: TextView = view.specie_text
val information: LinearLayout = view.information_layout
}
}
并且正在制作这个:
https://media.giphy.com/media/9JcLhfgXOdt81WUxsE/giphy.mp4
如您所见,如果我单击一个项目,则会打开一个带有加载的布局。我的问题是,当我单击一个项目然后滚动时,也会打开其他一些项目,但我没有单击它们。就像 ViewHolder 正在回收视图,并不关心带有加载栏的布局是否不可见。
我的适配器可能有什么问题?
【问题讨论】:
-
显然你没有在 onBindViewHolder 中重置视图状态
-
我应该如何重置状态?
-
通过调用 hideInformation ?
标签: android scroll android-recyclerview kotlin android-viewholder