Firebase RecyclerView OnDataChanged Показан только последний элемент - PullRequest
0 голосов
/ 26 июня 2018

Я разрабатываю приложение для Android-чата, следуя this Я извлекаю весь список друзей Затем на основе их идентификатора пользователя я извлекаю данные пользователя из данных пользователя, таких как имя пользователя, изображение пользователя и статус пользователя базы данных показан ниже.

https://i.stack.imgur.com/3opoN.png

и

https://i.stack.imgur.com/0yC2K.png

Итак, что является главной проблемой, основной проблемой является следующий код:

        @Override
        protected void onBindViewHolder(FriendsFragment.friendsViewHolder holder, int position, Friends model) {

            final String list_User_id=getRef(position).getKey();

            mUserdatabase.child(list_User_id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                        UserName = dataSnapshot.child("name").getValue().toString();
                        friendsViewHolder.setName(UserName);
                        UserStatus = dataSnapshot.child("status").getValue().toString();
                        friendsViewHolder.setStatus(UserStatus);
                        thumb_img = dataSnapshot.child("thumb_img").getValue().toString();
                        friendsViewHolder.setThumbnail(thumb_img,getActivity());
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent prfile_Intent=new Intent(getActivity(),ProfileActivity.class);
                    prfile_Intent.putExtra("User_id",list_User_id);
                    startActivity(prfile_Intent);

                }
            });

это дает мне переработчикПросмотреть результат в котором показан только последний элемент, как показано на рисунке

https://i.stack.imgur.com/xteUF.png

Я гуглю его, а также ищу в потоке Stackover, но не могу найти решение за последние 3 дня. Подобный вопрос задан, но я не могу решить свою проблему с здесь пожалуйста помогите и не проголосуйте за мой вопрос спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Это происходит потому, что метод onBindViewHolder() вызывается столько раз, сколько элементов поступает из вашей базы данных. Так что в этом случае все внутри этого метода тоже срабатывает. Это означает, что вы подключаете слушателя при каждом вызове метода onBindViewHolder(). Там нет необходимости делать это. Вы можете просто получить имя пользователя и все другие свойства непосредственно из объекта model, который передается в качестве аргумента этому методу, например:

String UserName = model.getUserName();
String UserStatus = model.getUserStatus();
//And so on for the other properties.
0 голосов
/ 26 июня 2018

addValueEventListener в методе onBindViewHolder - очень плохая идея. Вы можете создать список пользователей в своем фрагменте и передать этот список в адаптер.

...