Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在RecyclerView中使用画布的自定义视图_Android_Kotlin - Fatal编程技术网

Android 在RecyclerView中使用画布的自定义视图

Android 在RecyclerView中使用画布的自定义视图,android,kotlin,Android,Kotlin,我有一个自定义视图,你可以用手指在其中画画,我用这个视图填写一个recyclerview,制作一个适配器,例如获得一个大小为10的列表,其中每个项目都是一个自定义视图,如果用户在位置5的项目中进行绘制,则在滚动时,相同的图片会出现在他未绘制的另一个项目中。 这是我的适配器: class CustomViewListAdapter : RecyclerView.Adapter<CustomViewListAdapter.ViewHolder>() { private var list

我有一个自定义视图,你可以用手指在其中画画,我用这个视图填写一个recyclerview,制作一个适配器,例如获得一个大小为10的列表,其中每个项目都是一个自定义视图,如果用户在位置5的项目中进行绘制,则在滚动时,相同的图片会出现在他未绘制的另一个项目中。 这是我的适配器:

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

中更改它们。我想知道是否有人能告诉我这篇文章有什么问题,以便我可以编辑和改进它?提前感谢你的帮助。