[英]When I delete an item in recyclerview and then add a new item, the items I deleted appear again in my Android App.How can I fix it? Any solution?
When I delete an item in recyclerview and then I add a new item, the items I deleted appear again on my Android app.当我在 recyclerview 中删除一个项目然后添加一个新项目时,我删除的项目再次出现在我的 Android 应用程序中。 I used the init in my Adapter to call the setonClickLister.
我在我的适配器中使用了 init 来调用 setonClickLister。 I think that I need to call this code in my Activity but how will ı do ?
我认为我需要在我的 Activity 中调用此代码,但我该怎么做? I use the kotlin and how can ı fix it ?
我使用 kotlin,我该如何解决? I shared my adapter code below to see clearly, thanx
我在下面分享了我的适配器代码以清楚地看到,thanx
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
}
}
by the way, ı tried this code, but it does not work顺便说一句,我试过这段代码,但它不起作用
notifyItemRemoved(position)
notifyItemRangeChanged(position, titletext.size)
Put button click inside onBindViewHolder:将按钮单击内部 onBindViewHolder:
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)
}
}
I have some suggests:我有一些建议:
-You shouldn't use inner ViewHolder like that. - 你不应该像那样使用内部 ViewHolder。
-And clarify your activity, adapter and viewholder. - 并澄清您的活动、适配器和查看器。
-Create your own Listener or a callback function to handle the action from the viewholder. - 创建您自己的侦听器或回调函数来处理来自查看器的操作。
-Create your data class/map/... to manage or store your data, shouldn't use like that. - 创建您的数据类/地图/...来管理或存储您的数据,不应该那样使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.