Kotlin Firebase Groupie RecyclerView прокручивается вверх, когда нажата кнопка - PullRequest
0 голосов
/ 08 февраля 2019

Я разработчик для iPhone и в настоящее время портирую свое приложение на Android с языком Kotlin, и это мое первое приложение для Android, поэтому я не знаю о студии Android или Kotlin, так что мой вопрос остается открытым.

У меня естьприложение, в котором я показываю все изображения, хранящиеся в базе данных, и каждое изображение имеет подобный узел.Поэтому, когда пользователи нажимают кнопку «Мне нравится», идентификатор пользователя будет добавлен к узлу, и повторное нажатие кнопки удалит идентификатор пользователя из узла firebase.Я использую 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 в классе factItem, онвыдает ошибку nullPointerException, поэтому я не могу использовать RecyclerView.scrollToPostion или RecyclerView для какой-либо функции

Спасибо, любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...