-1

私はたくさん試しましたが、毎回失敗しました。このRecyclerViewをFirebaseベースの子供で年代順に作るにはどうすればいいですか? ここまで私のRecyclerViewはすべての "イベント"をその値で表示しますが、ソートされていません。私は、イベントがタイムスタンプでソートされることを望みます。また私は自作のタイムスタンプがとても良いとは確信していません。リストを時系列順に並べるにはどうしたらいいですか?

Firebase Structure: FIREBASE --> Events --> Xmas  --> Timestamp: 20171224 
                --> Name: Xmas 
                --> Location: fathersHouse 

             --> Birthday --> Timestamp: 20183101 
                --> Name: Birthday 
                --> Location: myHome 

       //SOME MORE EVENTS WHICH CAN UPLOADED AND DELETED EVERYTIME 

毎回アプリケーションで作成できるイベントが複数あることにご注意ください。ソートでは、そこにいくつのイベントがあるのか​​を特定し、それを実現する必要があります。 - > Price:2 $のような他の値もありますが、上の例をすべて聴いていません。

package world.cryneo.partytime.java; 
    public class RequestsFragment extends Fragment { 


     private View mMainView2; 
     private RecyclerView mEventList; 
     private DatabaseReference mEventsDatabase; 
     private LinearLayoutManager mLayoutManager; 

     public void ChatsFragment() { 
      // Required empty public constructor 
     } 

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

      mMainView2 = inflater.inflate(R.layout.fragment_requests, container, false); 
      mEventsDatabase = FirebaseDatabase.getInstance().getReference().child("Events"); 
      mEventsDatabase.keepSynced(true); 
      mLayoutManager = new LinearLayoutManager(getContext()); 
      create_event_btn = (Button) mMainView2.findViewById(R.id.create_btn); 
      mEventList = (RecyclerView) mMainView2.findViewById(R.id.event_list); 
      mEventList.setHasFixedSize(true); 
      mEventList.setLayoutManager(mLayoutManager); 

      // Inflate the layout for this fragment 
      return mMainView2; 
     } 

     @Override 
     public void onStart() { 
      super.onStart(); 

      FirebaseRecyclerAdapter<Events, EventsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Events, EventsViewHolder>(

        Events.class, 
        R.layout.event_single_layout, 
        EventsViewHolder.class, 
        mEventsDatabase 

      ) { 
       @Override 
       protected void populateViewHolder(final EventsViewHolder eventsViewHolder, final Events events, int i) { 

        final String list_event_id = getRef(i).getKey();     

        mEventsDatabase.child(list_event_id).addValueEventListener(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 
          if (!dataSnapshot.exists()) { 
           return; 
          } 

          final String eventName = dataSnapshot.child("Name").getValue().toString(); 
          final String eventLocation = dataSnapshot.child("Location").getValue().toString(); 
          // HERE ARE SOME MORE EVENT VALUES BUT I CUT THEM OFF NOT IMPORTANT 

// THIS IS THE WAY I GET MY TIMESTAMP 
          final String eventYear1 = dataSnapshot.child("Jahr").getValue().toString(); 
          final String eventMonth1 = dataSnapshot.child("Monat").getValue().toString(); 
          final String eventDay1 = dataSnapshot.child("Tag").getValue().toString(); 
          final String eventHour1 = dataSnapshot.child("Stunde").getValue().toString(); 
          final String eventMinute1 = dataSnapshot.child("Minute").getValue().toString(); 
          final int eventYear = Integer.parseInt(eventYear1); 
          final int eventMonth = Integer.parseInt(eventMonth1); 
          final int eventDay = Integer.parseInt(eventDay1); 
          final int eventHour = Integer.parseInt(eventHour1); 
          final int eventMinute = Integer.parseInt(eventMinute1); 
          final String eventZeit = eventDay+"."+eventMonth+"."+eventYear; 

            eventsViewHolder.setEventZeit(eventZeit);         
           } 
          }); 
         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 

         } 
        }); 

       } 
      }; 
      mEventList.setAdapter(firebaseRecyclerAdapter); 

     } 

     public static class EventsViewHolder extends RecyclerView.ViewHolder { 

      View mView2; 

      public EventsViewHolder(View itemView2) { 
       super(itemView2); 
       mView2 = itemView2; 
      } 

      public void setEventName(String name) { 

       TextView eventName = (TextView) mView2.findViewById(R.id.event_name); 
       eventName.setText(name); 
      } 

      public void setEventZeit(String time) { 

       TextView eventTime = (TextView) mView2.findViewById(R.id.event_time); 
       eventTime.setText(time); 
      } 

      public void setEventLocation(String location) { 

       TextView eventTime = (TextView) mView2.findViewById(R.id.event_location); 
       eventTime.setText(location); 
      } 
      public void setEventPreis(String price) { 
       TextView eventPrice = (TextView) mView2.findViewById(R.id.event_price); 
       eventPrice.setText(price); 
      } 
     } 
    } 
+0

この質問は(HTTPS、私の古いものとの関係であります://stackoverflow.com/questions/47843294/query-does-not-order-firebase-children)しかし、これは構造が良くなり、理解が深まる可能な解決策に必要なすべての情報を含んでいます。 – Georq

+2

@AlexMamoがあなたの他の質問に答えて言ったように、 'mEventsDatabase.orderByChild(" Timestamp ")'をリサイクラーアダプターに渡す必要があります。 –

+0

他の[質問](https://stackoverflow.com/questions/47843294/query-does-not-order-firebase-children)から私の回答を使用しようとしましたか? –

答えて

0

Have you tried sorted list?ことが可能繰り返しまた右orderByChild()のドキュメントhttps://firebase.google.com/docs/reference/js/firebase.database.Reference#orderByChild

firebase.database().ref(endpoint) 
.orderByChild('timestamp') 
    .on('value', function(snapshot) { 
    this.data = []; 

    snapshot.forEach(function(child) { 
    this.data.push(child.val()); 
    }.bind(this)); 

    console.log("all", data.map(function(val) { return new Date(val.timestamp).toString(); })); 
}); 

からRecyclerView

関連する問題