在Recyclerview中按Datewise从Firestore检索数据

时间:2018-07-24 11:34:00

标签: android android-recyclerview google-cloud-firestore

我已经完成了我的应用程序,但是在此,我想按日期显示数据。怎么可能?

这是我的数据库结构。enter image description here

这是我的回收站适配器

public class BscRecyclerAdapter extends 
RecyclerView.Adapter<BscRecyclerAdapter.ViewHolder> {
private List<MainPage> mMainPage;
private Context context;


public BscRecyclerAdapter(Context context,List<MainPage> mMainPage){
    this.context = context;
    this.mMainPage =mMainPage;
}
@Override
public BscRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
    return new ViewHolder(view);   }

@Override
public void onBindViewHolder(BscRecyclerAdapter.ViewHolder holder, final int position) {
    holder.mTitle.setText(mMainPage.get(position).getTitle());
    holder.mDescription.setText(mMainPage.get(position).getDescription());
    holder.mDate.setText(mMainPage.get(position).getDate());
    final String Title = mMainPage.get(position).getTitle();
    final String Description = mMainPage.get(position).getDescription();
    final String Image = mMainPage.get(position).getImage();
    final String Date =  mMainPage.get(position).getDate();
    final String main_id =  mMainPage.get(position).mainId;

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

            Intent UpdateIntent = new Intent(context,BscUpdateDelete.class);

            UpdateIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            UpdateIntent.putExtra("main_id",main_id);
            UpdateIntent.putExtra("title",Title);
            UpdateIntent.putExtra("description",Description);
            UpdateIntent.putExtra("date",Date);
            UpdateIntent.putExtra("image",Image);

            context.startActivity(UpdateIntent);

        }
    });
    holder.mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String url = mMainPage.get(position).getImage();
            Intent intent  = new Intent(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setData(Uri.parse(url));
            context.startActivity(intent);
        }
    });

    ImageView post_image = holder.mImage;
    Glide.with(context).load(mMainPage.get(position).getImage()).into(post_image);

}

@Override
public int getItemCount() {
    return mMainPage.size();
}

我在Google上搜索过很多次,但没有任何解决方案  请帮忙。 我在回收站中按日期显示数据的操作。

这是我的片段。 我使用了按日期排序,但是在这篇文章中按日期显示,但是月份更改了

今天的日期是

25-07-2018

26-07-2018

27-07-2018

28-07-2018

然后当我创建日期为27-06-2018的新帖子时。

在2018年7月26日之后向我显示了此帖子。

 mFirestore.collection("Bsc").orderBy("date").addSnapshotListener(new 
EventListener<QuerySnapshot>() {
        @Override
        public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
            for (DocumentChange doc: documentSnapshots.getDocumentChanges()){
                if (doc.getType() == DocumentChange.Type.ADDED){
                    String doc_id = doc.getDocument().getId();
                    MainPage mainPage = doc.getDocument().toObject(MainPage.class).witId(doc_id);
                    mMainPage.add(mainPage);
                    mainPageRecyclerAdapter.notifyDataSetChanged();

                }
            }
        }
    });

1 个答案:

答案 0 :(得分:2)

您还必须提及根据您的要求可以升序或降序的排序顺序。因此,将查询更改为:-

 mFirestore.collection("Bsc").orderBy("date", Direction.DESCENDING).addSnapshotListener()...

并且您将日期存储在String中,这可能会在将来导致排序或其他问题。我建议使用时间戳格式存储日期。