Фильтрация ListView, нажав кнопку из базы данных Firebase - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь получить данные (Задачи) из Firebase, которые отвечают на запрос при нажатии кнопки.Я могу получить все данные (Задачи), но когда я нажимаю кнопку, чтобы получить отфильтрованные данные, я не получаю ожидаемых результатов.

Я установил, что нефильтрованный адаптер очищается при нажатии накнопку и установите отфильтрованный адаптер без результатов.

Я близок к получению этого права?

Структура базы данных

enter image description here

Мой запрос из базы данных

final Query statusQuery = FirebaseDatabase.getInstance().getReference().child("Store 01").child("Task List")
            .orderByChild("Status")
            .equalTo("Complete");

Код для выборки отфильтрованных данных

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

    statusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           statusQuery.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
                       filteredTasks.add(ds.getKey());
                       String name = ds.child("Name").getValue(String.class);
                       String date = ds.child("Date").getValue(String.class);
                       String assigned = ds.child("Assigned to").getValue(String.class);
                       String type = ds.child("Type").getValue(String.class);

                       queryTask.add(name  + "\n" + date + "\n" + assigned + "\n" + type);
                Log.d("TAG", name);
                   }//for
                   task_list.this.dbTasks.setAdapter(filterAdapter);
                   arrayAdapter.clear();
                   arrayAdapter.notifyDataSetChanged();
               }//onDataChange

               @Override
               public void onCancelled(@NonNull DatabaseError databaseError) {

               }//OnCancelled
           });
        }//OnClick
    });

Код для выборки нефильтрованных данных

ValueEventListener eventListener = new ValueEventListener() {
        //Searching the database and adding each task to list
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                //adding the key to an Arraylist to be referenced when deleting records
                tasks.add(ds.getKey());
                String name = ds.child("Name").getValue(String.class);
                String date = ds.child("Date").getValue(String.class);
                String assigned = ds.child("Assigned to").getValue(String.class);
                String type = ds.child("Type").getValue(String.class);

                listTask.add(name  + "\n" + date + "\n" + assigned + "\n" + type);
                Log.d("TAG", name);
            }//for
            task_list.this.dbTasks.setAdapter(arrayAdapter);
        }//onDataChange

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }//OnCancelled
    };
    database.addListenerForSingleValueEvent(eventListener);

1 Ответ

0 голосов
/ 26 февраля 2019
final ArrayAdapter<String> filterAdapter = new ArrayAdapter<String>(this, R.layout.tasks_layout, R.id.textTask, listTask);
this.dbTasks.setAdapter(filterAdapter);

Новый адаптер массива указывает на неправильный arrayList "listTask" Я указал на "queryTask", и это решило проблему.

filterAdapter = new ArrayAdapter<String>(this, R.layout.tasks_layout, R.id.textTask, queryTask);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...