Android 在RecyclerView中使用画布的自定义视图
我有一个自定义视图,你可以用手指在其中画画,我用这个视图填写一个recyclerview,制作一个适配器,例如获得一个大小为10的列表,其中每个项目都是一个自定义视图,如果用户在位置5的项目中进行绘制,则在滚动时,相同的图片会出现在他未绘制的另一个项目中。 这是我的适配器:Android 在RecyclerView中使用画布的自定义视图,android,kotlin,Android,Kotlin,我有一个自定义视图,你可以用手指在其中画画,我用这个视图填写一个recyclerview,制作一个适配器,例如获得一个大小为10的列表,其中每个项目都是一个自定义视图,如果用户在位置5的项目中进行绘制,则在滚动时,相同的图片会出现在他未绘制的另一个项目中。 这是我的适配器: class CustomViewListAdapter : RecyclerView.Adapter<CustomViewListAdapter.ViewHolder>() { private var list
class CustomViewListAdapter : RecyclerView.Adapter<CustomViewListAdapter.ViewHolder>() {
private var listSchedule = ArrayList<Int>()
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var calendarView: CustomView= itemView.calendar!!
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.schedule_item,
parent,
false
)
)
}
override fun getItemCount(): Int = listSchedule.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.calendarView.setValue(listSchedule[position] )
}
fun setSchedules(listSchedule: ArrayList<Int>) {
this.listSchedule = listSchedule
notifyDataSetChanged()
}
class CustomViewListAdapter:RecyclerView.Adapter(){
私有变量listSchedule=ArrayList()
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
var calendarView:CustomView=itemView.calendar!!
}
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
返回视窗座(
LayoutFlater.from(parent.context).充气(
R.布局图.明细表项目,
父母亲
假的
)
)
}
重写getItemCount():Int=listSchedule.size
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
holder.calendarView.setValue(listSchedule[位置])
}
有趣的集合计划(列表计划:ArrayList){
this.listSchedule=listSchedule
notifyDataSetChanged()
}
}您知道RecyclerView是如何工作的吗?假设列表中有1000项。一种简单的方法是从您的
schedule\u项目
layout中创建1000个视图,将它们绑定并显示在滚动视图中。然而,这样做需要花费大量的时间和内存。因此,聪明的安卓开发者想出了以下想法:
由于在1000个项目中,只有10个项目同时可见,因此我们只需创建10个视图,并且仅根据视图显示的实际项目更改视图的内容。因此,10个视图被重用或回收。
要使其工作,onBindViewHolder的实现必须确保以在给定位置显示项目内容的方式更新提供的viewholder
现在在您的代码中,您在onBindViewHolder
中所做的就是设置一个整数。没有设置任何自定义图形等的迹象,因此我假设该图形只是存储在CustomView中。由于只有这10个左右的自定义视图(如上所述),当它们被重用以显示不同的项目时,它们包含原始图形,因为您没有在onBindViewHolder
中更改它们。我想知道是否有人能告诉我这篇文章有什么问题,以便我可以编辑和改进它?提前感谢你的帮助。