-1

매번 시도했지만 실패했을 때 많이 시도했습니다. 어떻게 Firebase 기반의 RecyclerView를 연대순으로 만들 수 있습니까? 여기까지 내 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

마우스 오른쪽 버튼을 작동 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(); })); 
}); 

수 반복 how to order by timestamp using Firebase?이 질문은 내 이전과의 관계에