当我在recyclerview中删除一个项目,然后添加一个新项目时,我删除的项目会再次出现在我的Android应用程序中。我如何修复它?有解决办法吗?
当我在recyclerview中删除一个项目,然后添加一个新项目时,我删除的项目会再次出现在我的Android应用程序上。我在适配器中使用init调用setonClickLister。我认为我需要在我的活动中调用此代码,但ı将如何做?我用的是kotlin,怎么能修好它?我在下面分享了我的适配器代码,以清楚地看到thanx当我在recyclerview中删除一个项目,然后添加一个新项目时,我删除的项目会再次出现在我的Android应用程序中。我如何修复它?有解决办法吗?,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,当我在recyclerview中删除一个项目,然后添加一个新项目时,我删除的项目会再次出现在我的Android应用程序上。我在适配器中使用init调用setonClickLister。我认为我需要在我的活动中调用此代码,但ı将如何做?我用的是kotlin,怎么能修好它?我在下面分享了我的适配器代码,以清楚地看到thanx class NoteAdapter(private var titleText: ArrayList<String>, private var imageButto
class NoteAdapter(private var titleText: ArrayList<String>, private var imageButton: ArrayList<String>, private var noteText: ArrayList<String>) : RecyclerView.Adapter<NoteAdapter.ViewHolder>() {
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val itemTitle : TextView = itemView.findViewById(R.id.recyclerTitleText)
val itemImage : ImageView = itemView.findViewById(R.id.recyclerImage)
val itemDelete : ImageView = itemView.findViewById(R.id.delete)
init {
itemView.setOnClickListener { v: View ->
// Toast.makeText(itemView.context,"You clicked on item # ${position + 1}", Toast.LENGTH_SHORT).show()
val intent = Intent(itemView.context, PastNotesActivity::class.java)
intent.putExtra("oldTitle", titleText[position])
intent.putExtra("oldNote", noteText[position])
intent.putExtra("oldImage", imageButton[position])
itemView.context.startActivity(intent)
}
itemDelete.setOnClickListener { v: View ->
titleText.removeAt(position)
imageButton.removeAt(position)
notifyItemRemoved(position)
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val v = LayoutInflater.from(parent.context).inflate(R.layout.recycler_row, parent, false)
return ViewHolder(v)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemTitle.text = titleText[position]
Picasso.get().load(imageButton[position]).resize(150,150).into(holder.itemImage)
}
override fun getItemCount(): Int {
return titleText.size
}
}
在BindViewHolder内单击放置按钮:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemTitle.text = titleText[position]
Picasso.get().load(imageButton[position]).resize(150,150).into(holder.itemImage)
val itemDelete : ImageView = itemView.findViewById(R.id.delete)
itemDelete.setOnClickListener { v: View ->
titleText.removeAt(position)
imageButton.removeAt(position)
notifyItemRemoved(position)
}
}
我有一些建议:
-您不应该像那样使用内部视图保持器
-并阐明您的活动、适配器和视图持有者
-创建自己的侦听器或回调函数来处理来自viewholder的操作
-创建数据类/map/。。。要管理或存储您的数据,请不要这样使用。谢谢您的建议。我会尽力按照你说的做,但这里没有定义项目删除。我使用init。我尝试过这个,但是由于holder的原因,没有定义itemView。我试着和霍尔德一起写,但又没用了
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.itemTitle.text = titleText[position]
Picasso.get().load(imageButton[position]).resize(150,150).into(holder.itemImage)
val itemDelete : ImageView = itemView.findViewById(R.id.delete)
itemDelete.setOnClickListener { v: View ->
titleText.removeAt(position)
imageButton.removeAt(position)
notifyItemRemoved(position)
}
}