android - 我无法从 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()
}
}
}
解决方案
我相信你需要完成三个任务:
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
- 在of 中添加
onItemClickListener()
对listener
实例的调用。OnClickListener
itemButtonDelete
itemButtonDelete.setOnClickListener { v: View ->
titleText.removeAt(position)
imageButton.removeAt(position)
notifyItemRemoved(position)
listener.onItemClickListener(v, position, ...)
}
itemDelete
在 Activity 中定义的方法中与 FireStore 数据库交互。
fun itemDelete(item: Any) {
// db...
}
如果不知道表格的形状,我不能说数据库操作会是什么样子,但我假设您可以在 FireStore 文档的帮助下从这里获取它。
推荐阅读
- servlets - TomEE+ 8.0 - OperationNotSupportedException:上下文是只读的]
- git - BFG Repo Cleaner - 已删除的文件仍在提交更改中
- javascript - JQuery/Javascript 我的功能在按下按钮时没有运行
- azure - Azure 服务总线 - 描述逻辑
- python - 获取多索引熊猫系列级别内序列的第一个和最后一个元素
- c# - 将具有可变自定义数据的自定义属性附加到 PropertyGrid 中的类属性
- javascript - 我可以简单地用 Javascript 中的 Indexof 替换 Includes 吗?
- reactjs - 你能根据用户源ip隐藏一个html按钮吗
- python - 将时间戳和用户名添加到日志
- google-apps-script - 如何在 Google Apps 脚本中修复此脚本以创建带有邀请的日历活动?