android - 使用firestore刷新recyclerview后保持复选框处于激活状态
问题描述
当我单击 RecyclerView 中的复选框时,它被激活,一切正常,但是当我刷新布局并且不再选中复选框时。
使用 Firestore 刷新 RecyclerView 后如何保持复选框处于激活状态?
用户类:
class User {
lateinit var userphoto: StorageReference
lateinit var username:String
lateinit var title:String
lateinit var notes: String
lateinit var id: String
var isSelected:Boolean = false
constructor( id: String?,username:String?, userphoto:StorageReference?
, title: String?, notes: String?, isSelected:Boolean?) {
this.title= title!!
this.id= id!!
this.username= username!!
this.notes= notes!!
this.isSelected= isSelected!!
this.userphoto= userphoto!!
}
fun setIsSelected(selected: Boolean) {
isSelected = selected
}
}
我的适配器:CustomAdapter.class
class CustomAdapter( var mylist:ArrayList<User>)
:RecyclerView.Adapter<CustomAdapter.viewHolde>() {
var db = FirebaseFirestore.getInstance();
var currentuser = FirebaseAuth.getInstance().currentUser!!
private val notebookRef4 = db.collection("ShowData")
lateinit var c: Context
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): viewHolde {
var v = LayoutInflater.from(parent.context)
.inflate(R.layout.iktem_list, parent, false)
return viewHolde(v)
}
override fun getItemCount(): Int {
return mylist.size
}
override fun onBindViewHolder(holder: viewHolde, position: Int) {
holder.likee.setOnCheckedChangeListener(null)
holder.likee.setChecked(mylist.get(position).isSelected)
holder.likee.setOnCheckedChangeListener { buttonView, isChecked ->
mylist.get(position).setIsSelected(isChecked)
var mynote = UserUID(mylist.get(position).id)
if (isChecked) {
notebookRef4.document(currentuser.uid)
.collection("like").document(mylist.get(position).id).set(mynote)
mylist.get(position).setIsSelected(isChecked)
} else {
notebookRef4.document(currentuser.uid)
.collection("like").document(mylist.get(position).id).delete()
mylist.get(position).setIsSelected(false)
}
}
}
@SuppressLint("ParcelCreator")
class viewHolde(item: View) : RecyclerView.ViewHolder(item){
@SuppressLint("WrongViewCast")
var likee = item.findViewById(R.id.toggleButton) as ToggleButton
}}
myMainActivity: RecyclerActivity.class
class RecyclerActivity : AppCompatActivity(){
var rv:RecyclerView? = null
var currentuser = FirebaseAuth.getInstance().currentUser!!.uid
val str= FirebaseStorage.getInstance().reference
var db = FirebaseFirestore.getInstance();
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_recycler)
rec()
}
@SuppressLint("WrongConstant")
fun rec(){
var myarray=ArrayList<User>()
rv=findViewById(R.id.idrecycler) as? RecyclerView
db.collection("ProfileData")
.addSnapshotListener { querySnapshot, firebaseFirestoreException ->
if (querySnapshot != null) {
for(da in querySnapshot) {
val note = da.toObject(Note::class.java)
var title = note.title
var description = note.notes
var username = note!!.username
var id = note!!.id
myarray.add(User(id!!,username!!, str.child(currentuser), title!!, description!!,false))
}
}
}
rv!!.layoutManager= LinearLayoutManager(this, LinearLayout.VERTICAL,false)
val c= CustomAdapter(myarray )
rv!!.adapter=c
}
解决方案
因为在从 Firestore 刷新期间,您始终将选中的值设置为 false。
myarray.add(User(id!!,username!!, str.child(currentuser), title!!, description!!,false)) // you set false here
要解决此问题,您必须将选中/取消选中数据存储在 Firestore 中并在用户操作期间更新
推荐阅读
- web-applications - Qliksense webapp 是如何工作的?
- powershell - power shell 命令在 Azure Devops 的 Yaml 管道中不起作用
- powershell - 如何将 powershell 变量作为参数扩展到另一个程序?
- powershell - 执行控制台 .NET Core 程序可从终端运行,但不能从脚本运行
- javascript - 如何为 Esri Javascript API 4.18 返回要素图层中点的纬度和经度
- python - python 仅在记录某些内容时才创建日志文件
- django - Django:按日期过滤相关字段会产生不需要的结果
- spring-batch - Spring Batch ORA-08177: 无法为 BATCH_JOB_INSTANCE 序列化此事务的访问
- r - 最小化 ROC 曲线下的面积以优化具有 optim 的多项式预测器的参数
- angular - Angular:如何在使用 addEventListener 添加的 eventHandler 函数中访问本地组件 var