# #java #android #firebase #firebase-realtime-database #datepicker
Вопрос:
Я пытаюсь реализовать свой собственный CardView
в Fragment
следующей предыдущей справке от другого пользователя SO. Я думаю, что все сделал правильно, однако я не вижу ожидаемых результатов и думаю, что вина в другом..
То, что у меня есть, — это a CalendarView
внутри a Fragment
, которое отображает выбранную дату внутри TextView
использования setOnDateChangeListener
. Затем у меня есть скрытый RecyclerView
CardView
, в котором есть a, который я пытаюсь вызвать, если CalendarView
дата совпадает с датой, хранящейся в моей базе данных Firebase.. Все еще со мной?
Я создаю расписание событий, используя форму, в которой есть название события, дата, время, описание , все сохраненные как strings
, см. Ниже:
Я понятия не имею, как получить push()
значение при обращении к моей базе данных, поэтому на данный момент я просто использовал имя события для удобства..
Вот что у меня есть, это немного повсюду, так как я тестировал здесь и там, но, пожалуйста, дайте мне знать, если у вас есть вопросы.. Я попытался разделить ссылки на мою базу данных, чтобы использовать их в разных областях, но это тоже не сработало.
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_schedule, container, false);
intentEvent = getActivity().getIntent().getStringExtra("name");
// ------------- firebase --------------
firebaseAuth = FirebaseAuth.getInstance();
currentUser = firebaseAuth.getCurrentUser();
uid = currentUser.getUid();
databaseReference = FirebaseDatabase.getInstance().getReference("user").child(uid).child("dogs").child(intentEvent);
eventReference = databaseReference.child("events");
dateRef = eventReference.child("date");
// -------------------------------------
calendarView = view.findViewById(R.id.calendarView);
scheduleTitle = view.findViewById(R.id.scheduleTitle);
noEventPlaceholder = view.findViewById(R.id.noEventPlaceholder);
addNewEvent = view.findViewById(R.id.addNewEvent);
eventRecycler = view.findViewById(R.id.eventRecycler);
eventRecycler.setVisibility(View.GONE);
eventLayoutManager = new LinearLayoutManager(getContext());
eventRecycler.setLayoutManager(eventLayoutManager);
FirebaseRecyclerOptions<Event> options
= new FirebaseRecyclerOptions.Builder<Event>()
.setQuery(databaseReference, Event.class)
.build();
eventAdapter = new EventAdapter(options, new EventAdapter.EventCallback() {
@Override
public void onCardViewClick(Event event) {
// view event in full?
}
});
if (eventReference == null) {
addNewEvent.setVisibility(View.VISIBLE);
noEventPlaceholder.setText("Nothing planned for today.. Let's go walkies!");
} else {
eventRecycler.setVisibility(View.VISIBLE);
}
eventRecycler.setAdapter(eventAdapter);
getEventData();
dog = new Dog();
calendarView
.setOnDateChangeListener(
new CalendarView
.OnDateChangeListener() {
@Override
public void onSelectedDayChange(
@NonNull CalendarView view,
int year,
int month,
int dayOfMonth)
{
String date
= dayOfMonth "-"
(month 1) "-" year;
scheduleTitle.setText(date);
}
});
// this is an example of what i am trying to do..
if (String.valueOf(dateRef).equals(scheduleTitle)) {
eventRecycler.setVisibility(View.VISIBLE);
noEventPlaceholder.setText("Nothing planned for today.. Let's go walkies!");
}
// ---------------------------------------------
addNewEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.child("name").getValue(String.class);
Intent intentEventForm = new Intent(getContext(), EventForm.class);
intentEventForm.putExtra("name", name);
startActivity(intentEventForm);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("TAG", "onCancelled", databaseError.toException());
}
});
}
});
return view;
}
public void getEventData() {
eventReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String eventName = dataSnapshot.child("name").getValue(String.class);
String eventDate = dataSnapshot.child("date").getValue(String.class);
String eventTime = dataSnapshot.child("time").getValue(String.class);
String eventDescription = dataSnapshot.child("description").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("TAG", "onCancelled", databaseError.toException());
}
});
}
Комментарии:
1. Если я вас правильно понял, вам нужно сравнить разные типы. С java это невозможно, и вам нужно привести дату к одному типу. Это возможно с
SimpleDateFormat
Calendar
Date
помощью классов или или2. О, хорошо! В этом есть смысл.. Я действительно делал это раньше в другом занятии, глупый я..
3. Не уверен, можно ли использовать это с помощью onDateChangeListener, но вам нужно будет изучить это
4. У
onDateChangeListener
вас есть год, месяц и день. То же самое вы получаете поdate
стоимости от Firebase