Удалить дубликаты из адаптера ListView - PullRequest
2 голосов
/ 24 мая 2019

Я создал несколько адаптеров массивов для фильтрации ListView из Firebase. Всякий раз, когда я выбираю фильтр («Выполняемые задачи») в пользовательском интерфейсе, он работает, однако, когда я снова нажимаю на тот же фильтр («Выполняемые задачи»), он создает дубликат этого списка. Я изо всех сил пытаюсь найти ответ на SO с подобным контекстом.

Любая помощь будет оценена.

task_list.java

case R.id.inProgressStatus:

final ArrayList<String> filteredbyInProgress = new ArrayList<>();

final Query queryInProgress = FirebaseDatabase.getInstance().getReference("stores").child("Store 01").child("Task List")
                    .orderByChild("Status")
                    .equalTo("In-Progress");

final ArrayAdapter<String> arrayAdapter4 = new ArrayAdapter<String>(this, R.layout.tasks_layout, R.id.textTask, listTask);
            this.dbTasks.setAdapter(arrayAdapter4);

final ArrayAdapter<String> filterAdapter4 = new ArrayAdapter<String>(this, R.layout.tasks_layout, R.id.textTask, queryTask);
            this.dbTasks.setAdapter(filterAdapter4);


queryInProgress.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        //adding the key to an Arraylist to be referenced when deleting records
                        filteredbyInProgress.add(ds.getKey());
                        String name = ds.child("Name").getValue(String.class);

                        queryTask.add(name);
                    }

                    task_list.this.dbTasks.setAdapter(filterAdapter4);
                    arrayAdapter4.clear();
                    arrayAdapter4.notifyDataSetChanged();
                }

1 Ответ

1 голос
/ 25 мая 2019

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

queryInProgress.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                queryTask.clear();
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    //adding the key to an Arraylist to be referenced when deleting records
                    filteredbyInProgress.add(ds.getKey());
                    String name = ds.child("Name").getValue(String.class);

                    if (!queryTask.contains(value)) {
                      queryTask.add(value);
                    }
                }

                task_list.this.dbTasks.setAdapter(filterAdapter4);
                filterAdapter4.notifyDataSetChanged();
                arrayAdapter4.clear();
                arrayAdapter4.notifyDataSetChanged();
            }
...