我是iPhone开发人员,目前正在使用Kotlin语言将我的应用程序移植到Android,这是我的第一个android应用程序,所以我对Android Studio或Kotlin的了解不多,所以我的问题就没了。
我有一个应用程序,其中显示存储在Firebase中的所有图像,每个图像都有一个类似的节点。因此,当用户按下“赞”按钮时,用户ID将添加到该节点,再次按下该按钮将从Firebase节点中删除用户ID。我使用Groupie RecyclerView将图像用于行。唯一的问题是,当我单击“喜欢”按钮时,RecyclerView会滚动到顶部,这很烦人,并且不是一个好的用户界面。我该如何停止点赞按钮以停止滚动到顶部,我相信它是由于firbase数据库刷新RecyclerView而应有的滚动。
下面是我用来从数据库中获取数据的功能
private fun fetchFactsFromFirebase(){
val factsDb = FirebaseDatabase.getInstance().getReference("/Facts").orderByChild("/timestamp")
factsDb.addValueEventListener(object : ValueEventListener{
override fun onDataChange(p0: DataSnapshot) {
val adapter = GroupAdapter<ViewHolder>()
p0.children.forEach {
val facts = it.getValue(Facts::class.java)
if (facts != null) {
adapter.add(FactsItems(facts))
}
}
recycleview_facts.adapter = adapter
}
下面是我用于将数据库绑定到行的事实类
class FactsItems(val facts: Facts) : Item<ViewHolder>(){
val factsId : String = ""
val currentUser = FirebaseAuth.getInstance().currentUser?.uid
override fun bind(viewHolder: ViewHolder, position: Int) {
viewHolder.itemView.textview_facts.text = facts.captionText
Picasso.get().load(facts.factsLink).placeholder(R.drawable.progress_image).into(viewHolder.itemView.imageview_facts)
viewHolder.itemView.likeview_facts.text = facts.likes.count().toString()
val likeButon = viewHolder.itemView.like_facts_image_button
if (facts.likes.contains(currentUser!!)){
likeButon.setImageResource(R.drawable.like)
likeButon.isSelected = true
}else{
likeButon.setImageResource(R.drawable.nolike)
likeButon.isSelected = false
}
viewHolder.itemView.imageview_facts
viewHolder.itemView.like_facts_image_button.isSelected
viewHolder.itemView.like_facts_image_button.setOnClickListener {
if (likeButon.isSelected == true){
likeButon.isSelected = false
likeButon.setImageResource(R.drawable.nolike)
addSubtractLikes(false,position, viewHolder)
}else {
likeButon.isSelected = true
likeButon.setImageResource(R.drawable.like)
addSubtractLikes(true, position, viewHolder)
}
}
}
下面是addSubtract函数,用于添加或减去用户喜欢的位置,而忽略该位置和视图持有者,我只是试图在此函数中获得该位置,但无法正常工作。
fun addSubtractLikes(addlike: Boolean, position: Int, viewHolder: ViewHolder){
val currentUsers = FirebaseAuth.getInstance().currentUser?.uid
if (addlike){
facts.likes.add(currentUsers!!)
Log.d("Like","User Liked ${currentUsers}")
}else {
facts.likes.remove(currentUsers!!)
Log.d("Like","User DisLiked ${currentUsers}")
}
val likeRef = FirebaseDatabase.getInstance().getReference("/Facts").child(facts.factsId).child("/likes")
likeRef.setValue(facts.likes)
Log.d("Like","liked Users ${facts.likes}")
}
我尝试了什么
当我将RecyclerView的实例放入factsItem类时,它给了我一个错误nullPointerException
所以我不能使用RecyclerView.scrollToPostion
或RecyclerView任何功能
谢谢您的帮助。