Firestore)如何在更新数据字段后更新recyclerview

时间:2020-10-26 03:05:18

标签: firebase google-cloud-firestore

我有recyclerview,有一个按钮。
此按钮可以将布尔状态从true更改为false,从false更改为true。
我想根据按钮的布尔状态更改其背景颜色。

下面是我的代码

class ProjectFeedBigAdapter : ListAdapter<Project, ProjectFeedBigAdapter.ProjectFeedBigViewHolder>(
    ProjectFeedDiffUtil()
) {
    val db: FirebaseFirestore = FirebaseFirestore.getInstance()
    val projects: ArrayList<Project> = arrayListOf()

    init {
        db.collection("projects")
            .orderBy("timeStamp", Query.Direction.DESCENDING)
            .addSnapshotListener { querySnapshot, exception ->
                projects.clear()

                if(querySnapshot == null) return@addSnapshotListener

                for(snapshot in querySnapshot.documents) {
                    val project = snapshot.toObject(Project::class.java)
                    projects.add(project!!)
                }
                submitList(projects)
            }
    }

    override fun onCreateViewHolder...{...}

    override fun onBindViewHolder(holder: ProjectFeedBigViewHolder, position: Int) {
        val item = getItem(position)

        holder.apply {
            when(item.booleanState) {
                true -> {
                    // Button BackgroundColor Change
                }
                else -> {
                    // Button BackgroundColor Change
                }
            }

            stateButton.setOnClickListener {
                val project = db.collection("projects").document(item.projectId)

                item.booleanState?.let {
                    project
                        .update("booleanState", !it)
                        .addOnSuccessListener { Toast.makeText(//context, "Success", Toast.LENGTH_SHORT).show() }
                        .addOnFailureListener { e ->  }
                }
            }
        }

    }

    inner class ProjectFeedBigViewHolder(private val view: View): RecyclerView.ViewHolder(view) {
    ...
    }
}


class ProjectFeedDiffUtil: DiffUtil.ItemCallback<Project>() {
    override fun areItemsTheSame(oldItem: Project, newItem: Project): Boolean {
        return oldItem.timeStamp == newItem.timeStamp
    }

    override fun areContentsTheSame(oldItem: Project, newItem: Project): Boolean {
        return oldItem == newItem
    }

}

当我单击“ stateButton”时,

  1. 布尔状态发生变化。 (我可以看到数据在Firebase Cloud上正在更改)
  2. 此外,可以看到通过了commitList()。
  3. 但不要输入onBindViewHolder,因此stateButton的背景色不会改变。

我该如何解决这个问题?

0 个答案:

没有答案