![](/img/trans.png)
[英]Android Array list filter and group items which have the same key value
[英]Android order Firebase items by key which is a date
我在我的Firebase中有一个孩子列表,并且键名是日期,现在我想以某种方式订购这些项目,以便我可以首先更新日期项目,而且我正在使用自定义收养者通过FirebaseRecyclerAdapter显示此数据,我还需要当我单击以下项目时,获取儿童钥匙:这就是我的孩子看起来像在这里查看
这是我显示数据的代码
DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("winners");
Query personsQuery = personsRef.orderByKey();
mPeopleRV.hasFixedSize();
LinearLayoutManager mLayoutManager = new LinearLayoutManager(Notification.this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mPeopleRV.setLayoutManager(mLayoutManager);
FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(Notification.NewsViewHolder holder, final int position, final News model) {
holder.setTitle(capitalize(model.getName()));
holder.setDesc(model.getDate().replace('-', ' '));
holder.setAmount(model.getAmount());
holder.setImage(getBaseContext(), model.getImg());
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Here i need child key when click on item (Date)
}
});
}
@Override
public Notification.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row, parent, false);
return new Notification.NewsViewHolder(view);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
我需要的东西:
按日期订购商品(在此示例中,第一个位置的最新日期
02九月2018)
用户单击项目时获取密钥(密钥,即date)
除非您对数据库架构进行一些更改,否则无法按日期对项目进行排序。 即使您的密钥持有“日期”之王(2018年9月2日),也无法按日期对它们进行排序,因为所有Firebase密钥都是字符串,并且在订购字符串时,按字典顺序进行排序。
为了解决这个问题,你应该在新添加timestamp
作为解释属性每个对象的位置 。 假设这些对象在名为dates
的节点内,则只需使用如下查询:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("dates").orderByChild("timestamp");
query.addListenerForSingleValueEvent(/* ... */);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.