当我从 firebase 实时数据库获取我的数据时,它会自动按升序列出,但我试图让我放入 arraylist 的值以相反的顺序而不是升序列出。
使用 listview 时是否可以获得值的相反顺序?
目前使用的代码是:
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
您可以通过这样做在将 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() 时对象都会被反转,并且它的顺序会混淆。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句