像按下按钮一样,将Kotlin Firebase Groupie RecyclerView滚动到顶部

时间:2019-02-08 16:19:25

标签: android firebase kotlin android-recyclerview

我是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任何功能

谢谢您的帮助。

0 个答案:

没有答案