0

L'onglet 2 doit afficher les éléments à proximité du client. Date et heure actuelles, reminderTime et reminderDate sont déjà ajoutés dans la base de données Firebase, What's la meilleure façon d'obtenir les articles dans la vue recycleur dans l'ordre de la proximité décroissante de l'heure et de la date des clients. (Les plus proches sont en haut). Toute aide sera appréciée.Comment organiser les éléments dans Firebase Recycler View en fonction de la proximité de l'heure actuelle du client

Voici mon Firebase Database

Tab 2 Code

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

      //Returning the layout file after inflating 
      //Change R.layout.tab1 in you classes 
      View v = inflater.inflate(R.layout.tab2, container, false); 




      final FirebaseUser user =FirebaseAuth.getInstance().getCurrentUser(); 



      mDatabase = FirebaseDatabase.getInstance().getReference(); 
     //userID being receiverUID in database 
      Query query = mDatabase.child("reminders").orderByChild("receiverUID_status").equalTo(MainActivity.userID+"_"+"active"); 

      //Setting size of recycler view as constant 
      recyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view2); 
      recyclerView.setHasFixedSize(true); 

      //Setting Linear Layout 
      layoutManager = new LinearLayoutManager(getActivity()); 
      recyclerView.setLayoutManager(layoutManager); 
      recyclerView.setItemAnimator(new DefaultItemAnimator()); 


      adapter = new FirebaseRecyclerAdapter<Reminder,ReminderHolder>(
        Reminder.class, 
        R.layout.cards_layout, 
        ReminderHolder.class, 
        query){ 


       @Override 
       protected void populateViewHolder(ReminderHolder holder, Reminder reminder, final int position) { 
        //Setting the name,message and time 
        holder.setName(reminder.getSenderName()); 
        holder.setMessage(reminder.getReminderMessage()); 
        holder.button_reject.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          adapter.getRef(position).child("receiverUID_status").setValue("reject"); 
          adapter.notifyItemRemoved(position); 

         } 
        }); 


       } 
      }; 

    return v 
} 

ReminderHolder classe

public class ReminderHolder extends RecyclerView.ViewHolder { 



    private final TextView mNameField; 
    private final TextView mMessageField; 
    public final Button button_reject; 

    public ReminderHolder(View itemView) { 
     super(itemView); 
     mNameField = (TextView) itemView.findViewById(R.id.name); 
     mMessageField = (TextView) itemView.findViewById(R.id.text); 
     button_reject=(Button)itemView.findViewById(R.id.button_reject); 

    } 

    private void rejectreminder(int adapterPosition) { 



    } 


    public void setName(String name) { 
     mNameField.setText(name); 
    } 

    public void setMessage(String message) { 
     mMessageField.setText(message); 
    } 


} 

Rappel classe

public class Reminder { 


    public String reminderMessage; 
    public String senderUID; 
    public String senderName; 
    public String receiverUID; 
    public String receiverName; 
    public String reminderTime; 
    public String timestamp; 
    public String status; 
    public String receiverUID_status; 

    public Reminder() { 
     // Default constructor required for calls to DataSnapshot.getValue(User.class) 
    } 

    public Reminder(String reminderMessage,String senderUID,String senderName,String receiverUID,String receiverName,String reminderTime,String timestamp,String status,String receiverUID_status) { 
     this.reminderMessage = reminderMessage; 
     this.senderUID =senderUID ; 
     this.senderName=senderName; 


     this.receiverUID=receiverUID; 
     this.receiverName=receiverName; 

     this.reminderTime=reminderTime; 
     this.timestamp=timestamp; 
     this.status=status; 
     this.receiverUID_status=receiverUID_status; 
    } 

Répondre

1

Y Vous devrez d'abord modifier la façon dont vous stockez la date dans un horodatage Unix réel, ou la date-heure dans un format textuel qui peut être facilement trié. Voir:

Ainsi, les meilleurs formats sont:

  • 1500241488157 (timestamp actuellement)
  • 2017-07-16T23:45:05 (temps sortable en ce moment)

Vous pouvez ensuite interroger des articles à venir avec:

Query query = ref.orderByChild("timestamp").startAt(System.currentTimeMillis()); 
query.addChildEventListener(new ChildEventListener() { 
    void onChildAdded(DataSnapshot snapshot, String previousKey) { 
    System.out.println(snapshot.getKey()+": "+snapshot.getChild("receiverName").getValue(String.class)); 
+0

Je comprends la nécessité d'utiliser Timestamp dans le but mais je suis déjà en utilisant une requête pour afficher les résultats spécifiques, maintenant je veux afficher les résultats selon la timestamp et je ne peux pas faire plusieurs requêtes dans firebase, si vous pouvez élaborer plus et me faire mieux comprendre –

+0

Je devais changer ma base de données et ensuite commander par horodatage résolu mon problème –