我已经设置了一个firebase数据库,我想知道我是如何制作它的,以便我的listView以升序或降序显示我的数据。
例如:如果我想要的东西是最贵的,我会在listView的顶部和底部的便宜的那些。
基本上我正在尝试创建一个排名活动,其中我有两个单独的列表视图,按成本和单独计数。
这就是我的计算所在:
@Override
protected void onStart() {
super.onStart();
itemlists=new ArrayList<String>();
databaseItems.child("items").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot itemSnapShot : dataSnapshot.getChildren()) {
String itemname=itemSnapShot.child("itemName").getValue().toString();
itemlists.add(itemname);
adapter = new ArrayAdapter(SearchActivity.this,android.R.layout.simple_list_item_1,itemlists);
listFinalCount.setAdapter(adapter);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
答案 0 :(得分:3)
如果要订购Firebase数据库查询的结果,则需要使用数字作为值,不字符串。如果您保留字符串,就像我在屏幕截图中看到的那样,您需要知道字符串已订购lexicographically
,并且我确定这不是您要查找的内容。
以升序或降序排序数据的最简单方法是在客户端。默认情况下,Firebase可以按给定属性按升序排序结果。 Firebase中没有方法按降序排序,但可以进行一些调整。
如果您使用RecyclerView
来显示数据,最简单的方法是使用以下代码:
LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
layoutManager.setReverseLayout(true);
layoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(layoutManager);
这个approch会改变您的订单。
另一种方法是创建自己的适配器,扩展FirebaseListAdapter
并覆盖getItem()
方法。
另一种方法是从数据库中获取数据,将其添加到Collection
,List
是一个很好的解决方案,然后使用Collections.reverse(yourList);
。
答案 1 :(得分:0)
firebaseDatabase.getReference().child("items").orderByChild("itemCost").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
//list.clear(); clear the list before updating.
for(DataSnapshot dataSnapshot : snapshot.getChildren()) {
// todo here
}
Adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
System.out.println("The read failed: " + error.getCode());
}
});
注意:任何没有我们正在查询的子键的节点都使用 null 值排序,这意味着它将排在第一位。