L oop в Firebase Recycler Adapter - PullRequest
       107

L oop в Firebase Recycler Adapter

0 голосов
/ 20 февраля 2020

Я получаю список идентификаторов пользователей из базы данных. И это получение значений правильно. Я использую FirebaseRecyclerAdapter, и когда я повторяю этот список в onBindViewHolder, циклы выполняются как размер списка. Например, здесь:

 adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
            @Override
            protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {
               for (int i = 0 ; i<list.size() ; i++){
                  Toast.makeText(List.this,"List :" +list.get(i), Toast.LENGTH_SHORT).show();
               }
            }
 }

Здесь у меня есть 5 пунктов в списке, и пока я повторяю, я поджариваю каждый элемент. Таким образом, здесь l oop работает в течение 25 раз, каждый элемент отображается 5 раз подряд. Сначала он показывает 5 элементов по порядку, после отображения последнего элемента, он снова начинает тост с первого и продолжается до 5 раз как размер списка. Так как же мне обслужить это и сделать так, чтобы все элементы повторялись только один раз?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

onBindViewHolder вызывается RecyvlerView для отображения данных в указанной позиции. Поскольку у вас есть все данные в List, их соответствующий индекс будет таким же, как и положение itemView.

В вашей функции вы перебираете все элементы в list для каждого itemView, который генерирует ViewHolder.

Вы должны удалить for l oop из своего кода и просто использовать position в качестве index для извлечения данных из ваш list, чей index совпадает с position.

Попробуйте этот код:

adapter = new FirebaseRecyclerAdapter<Profiles, DonarViewHolder>(model) {
            @Override
            protected void onBindViewHolder(@NonNull DonarViewHolder holder, int position, @NonNull Profiles profiles) {

                  Toast.makeText(List.this,"List :" +list.get(position), Toast.LENGTH_SHORT).show();

            }
 }

Для этого метода каждый раз, когда генерируется itemView, он будет быть на position и с этим в качестве индекса, вы можете легко получить данные из list.

для вашего сценария, поскольку вы уже внутри каждого itemView, генерируемого внутри onBindViewHolder, а затем вы выполняете итерацию для каждого элемента в list, следовательно, каждый элемент отображается ровно столько же раз, сколько и размер list.

1 голос
/ 20 февраля 2020

Я думаю, что вам не хватает метода, который вы можете использовать для вызова каждого элемента в отдельности. создать сеттер и геттер для вашего предмета. В вашем l oop вы можете назвать его list.get (position) .getItem.

...