首页 > 解决方案 > 我无法从 Android Kotlin 的 Cloud Firestore 中删除我的 recyclerview。我应该怎么办?

问题描述

我是 Kotlin Android 的新手。我在我的应用程序上添加了删除按钮以删除 recyclerView。当我单击此按钮时,我想从 recyclerview 列表和我的 Firestore 中删除。我从我的 recyclerview 中删除了它,但我无法在 cloud firestore 中删除它。我该如何解决?我在下面分享了我的活动和适配器。我想念什么?

在我的适配器代码中,我创建了 interface ,

class NoteAdapter(private var titleText: ArrayList<String>, private var imageButton: ArrayList<String>, private var noteText: ArrayList<String>, val listener:OnClick) : 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 itemButtonDelete: 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)

            }

            itemButtonDelete.setOnClickListener { v: View ->

                titleText.removeAt(position)
                imageButton.removeAt(position)
                notifyItemRemoved(position)

                listener.onItemClickListener(v, position, itemView)

            }

        }
    }


    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().cancelRequest(holder.itemImage)
        Picasso.get().load(imageButton[position]).resize(150,150).into(holder.itemImage)

    }

    override fun getItemCount(): Int {

        return titleText.size
    }

    interface OnClick {

        fun onItemClickListener(v: View, pos:Int, item: Any)

    }

}
   
 

我的活动,

类 ListViewActivity : AppCompatActivity() {

private  lateinit var auth: FirebaseAuth
private lateinit var db : FirebaseFirestore

var titleTextFromFB : ArrayList<String> = ArrayList()
var noteTextFromFB : ArrayList<String> = ArrayList()
var imageFromFB : ArrayList<String> = ArrayList()

var adapter: NoteAdapter? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_list_view)

    auth = FirebaseAuth.getInstance()
    db = FirebaseFirestore.getInstance()

    getDataFromFirestore()

    // recyclerview

    var layoutManager = LinearLayoutManager(this)
    recyclerView.layoutManager = layoutManager

    //adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object: NoteAdapter.OnClick )
    //recyclerView.adapter = adapter


    adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object: NoteAdapter.OnClick{

        override fun onItemClickListener(v: View, pos: Int, item: Any) {

            when(v.id){

                R.id.delete -> itemDelete(item)

            }

        }

    })

    recyclerView.adapter = adapter


}


override fun onCreateOptionsMenu(menu: Menu?): Boolean {

    val menuInflater = menuInflater
    menuInflater.inflate(R.menu.add_note, menu)

    return super.onCreateOptionsMenu(menu)
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {

    if (item.itemId == R.id.add_note_click) {
        // Take Notes Activity
        val intent = Intent(applicationContext, TakeNotesActivity::class.java)
        intent.putExtra("info","new")
        startActivity(intent)

    } else if (item.itemId == R.id.log_out) {

        val alert = AlertDialog.Builder(this)

        alert.setTitle("Log Out")
        alert.setMessage("Are you sure to logout from the app ?")
        alert.setPositiveButton("Yes") {dialog, which ->

            auth.signOut()
            val intent = Intent(applicationContext, MainActivity::class.java)
            startActivity(intent)
            finish()
        }

        alert.setNegativeButton("No") {dialog, which ->

        }

        alert.show()

    }

    return super.onOptionsItemSelected(item)
}

// get data from firestore

fun getDataFromFirestore() {

    db.collection("Notes").orderBy("date", Query.Direction.DESCENDING).addSnapshotListener{ snapshot, exception ->

        if (exception != null) {

            // If there is a error ,

            Toast.makeText(applicationContext, exception.localizedMessage.toString(), Toast.LENGTH_LONG).show()

        } else {

            if (snapshot != null) {

                if (!snapshot.isEmpty) {

                    titleTextFromFB.clear()
                    noteTextFromFB.clear()

                    val documents = snapshot.documents
                    for (document in documents) {

                        val userEmail = document.get("userEmail") as String
                        val noteTitle = document.get("noteTitle") as String
                        val yourNote = document.get("yourNote") as String
                        val downloadUrl = document.get("downloadUrl") as String
                        val timestamp = document.get("date") as Timestamp
                        val date = timestamp.toDate()

                        titleTextFromFB.add(noteTitle)
                        imageFromFB.add(downloadUrl)
                        noteTextFromFB.add(yourNote)

                        adapter!!.notifyDataSetChanged()

                    }
                }
            }

        }


    }


}

有趣的项目删除(项目:任何){

  db.collection("Notes").document().delete().

    addOnSuccessListener {

        delete.setOnClickListener { v: View ->

            titleTextFromFB.remove(item)

            noteTextFromFB.remove(item)

            imageFromFB.remove(item)
        }

    }

      .addOnFailureListener{exception ->

          Toast.makeText(applicationContext,"Error", Toast.LENGTH_LONG).show()


  }

}

}

标签: androidfirebasekotlinandroid-recyclerview

解决方案


我相信你需要完成三个任务:

  1. NoteAdapter用接口的实例初始化NoteAdapter.OnClick并设置recyclerView的适配器
adapter = NoteAdapter(titleTextFromFB, imageFromFB, noteTextFromFB, object : NoteAdapter.OnClick {
    override fun onItemClickListener(v: View, pos: Int, item: Any) {
        when (v.id) {
            R.id.delete -> itemDelete(item)
        }
    }
})

recyclerView.adapter = adapter
  1. 在of 中添加onItemClickListener()listener实例的调用。OnClickListeneritemButtonDelete
itemButtonDelete.setOnClickListener { v: View ->
    titleText.removeAt(position)
    imageButton.removeAt(position)
    notifyItemRemoved(position)

    listener.onItemClickListener(v, position, ...)
}
  1. itemDelete在 Activity 中定义的方法中与 FireStore 数据库交互。
fun itemDelete(item: Any) {
    // db...
}

如果不知道表格的形状,我不能说数据库操作会是什么样子,但我假设您可以在 FireStore 文档的帮助下从这里获取它。


推荐阅读