0

タブ2は、クライアントの現在の時刻と日付が近づくほどアイテムを表示する必要があります。reminderTimeとreminderDateはすでにFirebaseデータベースにフィードされています。クライアントの時間と日付から近づく順にリサイクルビューのアイテムを取得する最善の方法です(上のネイバーメント)。Firebase Recycler Viewのアイテムをクライアントの現在時刻との近さに応じて並べ替える方法

ここに私の Firebase Database

タブ2コード

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クラス

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); 
    } 


} 

リマインダークラス

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; 
    } 

答えて

1

Yがあります最初に、日付を実際のUNIXのタイムスタンプに保存する方法、または簡単にソートできるテキスト形式の日時に変更する必要があります。参照:

だから、より良いフォーマットは以下のとおりです。

  • 1500241488157(今のタイムスタンプ)
  • 2017-07-16T23:45:05(ソート可能時間今)

あなたは、その後で、今後の項目を照会することができます今私はによると、これらの結果を表示したい、私はしかし、私はすでに、特定の結果を表示するクエリを使用しています目的のためにタイムスタンプを使用する必要性を理解し

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

タイムスタンプと私はfirebaseで複数のクエリを行うことはできません、あなたが詳細を理解し、私がよりよく理解できるようにする場合 –

+0

私は自分のデータベースを変更し、タイムスタンプで注文して問題を解決する必要があった –

関連する問題