DatePickerDialog.OnDateSetListener
работает асинхронно, поэтому выбор даты не блокирует остальную часть приложения.Это означает, что дата, выбранная пользователем, доступна только в пределах onDateSet
.Весь код, для которого требуется дата, должен быть в пределах onDateSet
или вызываться оттуда.
Поэтому самое простое решение - переместить весь код, который зависит от даты, в onDateSet
:
mDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
month = month + 1;
String yearAsString = Integer.toString(year);
String monthAsString = Integer.toString(month);
String dayAsString = Integer.toString(day);
if (day <= 9 & month <= 9) {
String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else if (day <= 9 & month > 9) {
String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else if (month <= 9) {
String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else {
String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
}
String passDate = mDisplayDate.getText().toString().trim();
Log.i(TAG, "PassDate = " + passDate);
Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();
adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
holder.t1.setText(model.getTimestamp());
}
@NonNull
@Override
public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);
return new RecordsViewHolder(view);
}
};
GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(adapter);
}
};
Вы также можете заставить свой класс представления реализовать DatePickerDialog.OnDateSetListener
, чтобы немного уменьшить отступ:
public class SavedFeedRecords extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
Это означает, что onDateSet
становится обычным методом в SavedFeedRecords
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_saved_feed_records);
mDisplayDate = findViewById(R.id.tvDate);
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
databaseReference = FirebaseDatabase.getInstance().getReference().child(fAuth.getCurrentUser().getUid()).child("feedRecords");
findViewById(R.id.tvDate).setOnClickListener(displayDate);
findViewById(R.id.button).setOnClickListener(viewRecords);
};
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
month = month + 1;
String yearAsString = Integer.toString(year);
String monthAsString = Integer.toString(month);
String dayAsString = Integer.toString(day);
if (day <= 9 & month <= 9) {
String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else if (day <= 9 & month > 9) {
String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else if (month <= 9) {
String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
} else {
String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
mDisplayDate.setText(date);
}
String passDate = mDisplayDate.getText().toString().trim();
Log.i(TAG, "PassDate = " + passDate);
Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();
adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
holder.t1.setText(model.getTimestamp());
}
@NonNull
@Override
public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);
return new RecordsViewHolder(view);
}
};
GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(adapter);
}