【发布时间】:2020-10-24 16:00:06
【问题描述】:
问题: 我在顶部有一个水平滚动日历,下面有一个回收器视图,显示该日期的事件。我想默认显示当前日期的事件,如果我点击另一天,它将显示当天的事件。
例如。默认情况下,如果今天是 7 月 4 日,日历将选择在 7 月 4 日,它只会显示 7 月 4 日的事件,然后如果我在日历上单击/按 7 月 5 日,则 7 月 4 日的事件应该消失,而7 月 5 日应该会出现在 RecyclerView 中。
我的尝试:
private RecyclerView mFirestoreList;
private FirebaseFirestore firebaseFirestore;
private FirestoreRecyclerAdapter adapter;
private String day = Integer.toString(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
private String month = Integer.toString(Calendar.getInstance().get(Calendar.MARCH));
private String year = Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
View v;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_home, container, false);
createEvent = (Button) v.findViewById(R.id.createEventBtn2);
logout = (Button) v.findViewById(R.id.logoutBtn2);
HorizontalPicker picker = (HorizontalPicker) v.findViewById(R.id.datePicker);
picker.setListener(this).setDays(120).setOffset(7).setDateSelectedColor(Color.DKGRAY)
.setDateSelectedTextColor(Color.WHITE)
.setMonthAndYearTextColor(Color.DKGRAY)
.setTodayButtonTextColor(getResources().getColor(R.color.colorPrimary))
.setTodayDateTextColor(getResources().getColor(R.color.colorPrimary))
.setTodayDateBackgroundColor(Color.GRAY)
.setUnselectedDayTextColor(Color.DKGRAY)
.setDayOfWeekTextColor(Color.DKGRAY)
.setUnselectedDayTextColor(getResources().getColor(R.color.primaryTextColor))
.showTodayButton(false).init();
picker.setBackgroundColor(Color.LTGRAY);
picker.setDate(new DateTime());
firebaseFirestore = FirebaseFirestore.getInstance();
mFirestoreList = v.findViewById(R.id.firestore_list);
//Query
Query query = firebaseFirestore.collection(year).document(month).collection(day);
//Recycler options
FirestoreRecyclerOptions<EventModel> options = new FirestoreRecyclerOptions.Builder<EventModel>()
.setQuery(query, EventModel.class)
.build();
adapter = new FirestoreRecyclerAdapter<EventModel, EventsViewHolder>(options) {
@NonNull
@Override
public EventsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_list_item, parent, false);
return new EventsViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull EventsViewHolder holder, int position, @NonNull EventModel model) {
holder.className.setText(model.getClassName());
holder.location.setText(model.getLocation());
holder.time.setText(model.getTime());
}
};
mFirestoreList.setHasFixedSize(true);
mFirestoreList.setLayoutManager(new LinearLayoutManager(getContext()));
mFirestoreList.setAdapter(adapter);
createEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openCreatePage();
}
});
logout.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
FirebaseAuth.getInstance().signOut();
startActivity(new Intent(v.getContext(), Register.class));
}
});
return v;
}
@Override
public void onDateSelected(DateTime dateSelected){
Toast.makeText(v.getContext(), dateSelected.toString(), Toast.LENGTH_SHORT).show();
day = Integer.toString(dateSelected.getDayOfMonth());
month = Integer.toString(dateSelected.getMonthOfYear());
year = Integer.toString(dateSelected.getYear());
}
private class EventsViewHolder extends RecyclerView.ViewHolder{
private TextView className;
private TextView location;
private TextView time;
public EventsViewHolder(@NonNull View itemView) {
super(itemView);
className = itemView.findViewById(R.id.classNameSLI);
location = itemView.findViewById(R.id.locationSLI);
time = itemView.findViewById(R.id.timeSLI);
}
}
@Override
public void onStop() {
super.onStop();
adapter.stopListening();
}
@Override
public void onStart() {
super.onStart();
adapter.startListening();
}
我试图做的是更改日、月和年变量,由于这些变量正在更改,因此查询会更改,但不会更改。
这可能吗?我在找什么但找不到?
【问题讨论】:
标签: android firebase google-cloud-firestore