Получить пользовательские uid-данные в onBindViewHolder RecyclerView Firebase Adapter | FirebaseUI | Android, Java - PullRequest
0 голосов
/ 28 апреля 2020

здесь я сталкиваюсь с проблемой «держателя», так как я быстро прокручиваю, позиция держателя обновляется (из-за особенностей утилизации), и через некоторое время вызывается onSuccess (так как для извлечения данных требуется некоторое время), пока позиция держателя уже изменено, и holder.mUserFullName.setText (user.getName ()) применено к неправильной позиции держателя. Это происходит только тогда, когда я выполняю быструю прокрутку, если я отключаю утилизацию, то это решило проблему, но я хочу функцию утилизации.

@Override
        protected void onBindViewHolder(@NonNull PostVH holder, int position, @NonNull Post post) {

            MyFirestoreDbRefs.getAllUsersCollection().document(post.getByUid())
                    .get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
                @Override
                public void onSuccess(DocumentSnapshot documentSnapshot) {
                    User user=documentSnapshot.toObject(User.class);

                    /*here i face a problem with 'holder' as i fast scroll,holder position gets updated
                    * (because of recycling behaviour) and after a while onSuccess gets called(as it takes some time for fetching data) 
                    * until then the holder position already changed and holder.mUserFullName.setText(user.getName()) applied to wrong 
                    * holder position */

                    holder.mUserFullName.setText(user.getName());
                }
            });

        }

Структура пост-сбора в БД Структура коллекции пользователей в DB

1 Ответ

0 голосов
/ 28 апреля 2020

Приведенное ниже решение может работать в некоторых случаях:

Позвоните на ваш adapter:

adapter.setHasStableIds(true);

В вашем adapter переопределите 2 метода, под onBindViewHolder():

@Override
public long getItemId(int position) {
return position;
}

@Override
public int getItemViewType(int position) {
return position;
}
...