Можно ли изменить порядок в виде списка? - PullRequest
0 голосов
/ 28 мая 2019

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

Можно ли получить обратный порядок значений при работе со списком?
Код, используемый на данный момент:

    Query query = userRef.orderByChild("totalNumberOfSteps");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String username = ds.child("username").getValue(String.class);
                long totalNumberOfSteps = ds.child("totalNumberOfSteps").getValue(Long.class);
                Log.d(TAG , username + " - Steps: " + totalNumberOfSteps);
                arrayList.add(new String(username + "  -  " + "steps:  " + totalNumberOfSteps));

                arrayAdapter = new ArrayAdapter<>(Leaderboard.this , android.R.layout.simple_list_item_1 , arrayList);

                listView.setAdapter(arrayAdapter);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d(TAG , databaseError.getMessage()); //Don't ignore errors!
        }
    };
    query.addListenerForSingleValueEvent(valueEventListener);}}

Текущий вывод этого кода:

John Doe VI - Steps: 0
John Doe III - Steps: 0
John Doe V - Steps: 12
John Doe I - Steps: 79
John Doe IV - Steps: 88
John Doe II - Steps: 111

Предпочитаемый вывод:

John Doe II - Steps: 111
John Doe IV - Steps: 88
John Doe I - Steps: 79
John Doe V - Steps: 12
John Doe III - Steps: 0
John Doe VI - Steps: 0

При добавлении Collections.reverse(arrayList); к коду выдается:

John Doe II - Steps: 111
John Doe IV - Steps: 88
John Doe III - Steps: 0
John Doe VI - Steps: 0
John Doe V - Steps: 12
John Doe I - Steps: 79

1 Ответ

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

Вы можете стереть ArrayList перед его передачей в ArrayAdapter, выполнив:

Collections.reverse(arrayList);

В вашем случае скопируйте arrayList перед его обращением и передачей конструктору ArrayAdapter:

ArrayList<> tmpArr = new ArrayList<>(arrayList);
Collections.reverse(tmpArr);
arrayAdapter = new ArrayAdapter<>(Leaderboard.this , android.R.layout.simple_list_item_1 , tmpArr );

В противном случае объект arrayList будет обращаться каждый раз при вызове onDataChange () и его порядок будет перепутан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...