매번 시도했지만 실패했을 때 많이 시도했습니다. 어떻게 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);
}
}
}
, (HTTPS : //stackoverflow.com/questions/47843294/query-does-not-order-firebase-children)하지만 이건 더 잘 구조화되어 있고 더 잘 이해할 수 있습니다. 가능한 솔루션에 필요한 모든 정보를 포함하고 있습니다. – Georq
@AlexMamo가 다른 질문에 대한 대답으로 말했듯이,'mEventsDatabase.orderByChild ("Timestamp")'를 리사이클러 어댑터에 전달해야합니다. –
다른 [질문] (https://stackoverflow.com/questions/47843294/query-does-not-order-firebase-children)에서 내 대답을 사용하려 했습니까? –