Я разработчик для 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 для какой-либо функции
Спасибо, любая помощь будет оценена.