私はたくさん試しましたが、毎回失敗しました。この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);
}
}
}
この質問は(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)から私の回答を使用しようとしましたか? –