Problem:ProgressDialog in einem Adapter FireStore
Ich habe einen Bildschirm, wo es die Zeitpläne eines bestimmten Benutzers zeigt.
Aber zur gleichen Zeit muss ich überprüfen, ob einer der Zeitpläne bereits besetzt ist, und Ihren Hintergrund eine dunklere Farbe.
Drucken 1: RecyclerView-Bildschirm mit Zeitplänen.
Drucken 2: Es ist der gleiche Bildschirm, aber nach dem Überprüfen der verfügbaren Zeitpläne.
Hinweis: Wenn wir auf dem Wi-Fi-Netzwerk sind, ist das Laden schnell, aber wenn es ein mobiles Internet ist, ist es sehr langsam.
Ich brauche einen Weg, einen ProgressDialog in meinem Adapter, genau in dem Moment, in dem die Überprüfung der Zeitpläne erfolgt hinzuzufügen.
hier:
/*Checar Horario disponivel*/
final FirebaseFirestore mDB = FirebaseFirestore.getInstance();
CollectionReference mDBHorarios = mDB.collection("Empresas").document(empresa).collection("Agendamentos");
mDBHorarios.whereEqualTo("profissional_id", ref.getId_Prof()).whereEqualTo("agenda_hora", ref.getHora())
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
Agendamentos doc = document.toObject(Agendamentos.class);
String horaAgenda = doc.getAgenda_hora();
/*Cor do fundo*/
if (horaAgenda.equals(ref.getHora())){
fundoHora.setBackgroundColor(Color.parseColor("#E0E0E0"));
statusHoraAgenda = true;
}
}
} else {
}
}
});
Hinweis: Es kann sein, dass dies nicht eine gute Möglichkeit ist. Ich nehme an, schlägt vor, wenn es eine bessere Möglichkeit gibt, diese Abfrage in einem RecyclerView zu tun.
-Code Voll - Adapter:
public class HorariosProfissionalAdapter extends FirestoreAdapter<HorariosProfissionalAdapter.ViewHolder>{
public interface OnHorariosProfissionaisListner {
void onHorarioProfissionaisSelected(DocumentSnapshot horariosProfissional);
}
private OnHorariosProfissionaisListner mListner;
public HorariosProfissionalAdapter(Query query, OnHorariosProfissionaisListner listner){
super(query);
mListner = listner;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
return new ViewHolder(inflater.inflate(R.layout.card_horarios_profissional, parent, false));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(getSnapshot(position), mListner);
}
static class ViewHolder extends RecyclerView.ViewHolder {
private Boolean statusHoraAgenda = false;
@BindView(R.id.tvHoraProf)
TextView hora;
@BindView(R.id.fundoHorario)
LinearLayout fundoHora;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
public void bind(final DocumentSnapshot snapshot,
final OnHorariosProfissionaisListner listener) {
final HorariosProfissionais ref = snapshot.toObject(HorariosProfissionais.class);
String empresa = ref.getId_Emp();
/*Checar Horario disponivel*/
final FirebaseFirestore mDB = FirebaseFirestore.getInstance();
CollectionReference mDBHorarios = mDB.collection("Empresas").document(empresa).collection("Agendamentos");
mDBHorarios.whereEqualTo("profissional_id", ref.getId_Prof()).whereEqualTo("agenda_hora", ref.getHora())
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
Agendamentos doc = document.toObject(Agendamentos.class);
String horaAgenda = doc.getAgenda_hora();
/*Cor do fundo*/
if (horaAgenda.equals(ref.getHora())){
fundoHora.setBackgroundColor(Color.parseColor("#E0E0E0"));
statusHoraAgenda = true;
}
}
} else {
}
}
});
hora.setText(ref.getHora());
// Click listener
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null && !statusHoraAgenda) {
listener.onHorarioProfissionaisSelected(snapshot);
}
}
});
}
}
}
-Code Voll - Aktivität:
public class Agenda_profissionais extends AppCompatActivity implements HorariosProfissionalAdapter.OnHorariosProfissionaisListner {
private String mId_Empresa = null;
private String mId_Profissional = null;
private String mNome_Profissional = null;
private RecyclerView mCardHorarios;
private HorariosProfissionalAdapter mAdapter;
private FirebaseFirestore mFirestore;
private Query mQuery;
private ProgressDialog mProgress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_agenda_profissionais);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Horario");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
/* CONFIGURAÇÃO TOOLBAR*/
Bundle extra = getIntent().getExtras();
if (extra != null){
mId_Empresa = extra.getString("id_empresa");
mId_Profissional = extra.getString("id_profissional");
mNome_Profissional = extra.getString("nome_profissional");
}
/*Firebase*/
mFirestore = FirebaseFirestore.getInstance();
mQuery = mFirestore.collection("Empresas").document(mId_Empresa).collection("Profissionais").document(mId_Profissional).collection("Horarios");
mCardHorarios = (RecyclerView) findViewById(R.id.cardListaHorariosProf);
mAdapter = new HorariosProfissionalAdapter(mQuery, this){
@Override
protected void onDataChanged() {
if (getItemCount() == 0) {
mCardHorarios.setVisibility(View.GONE);
//mTxtVazio.setVisibility(View.VISIBLE);
} else {
mCardHorarios.setVisibility(View.VISIBLE);
}
}
};
mCardHorarios.setLayoutManager(new LinearLayoutManager(this));
mCardHorarios.setAdapter(mAdapter);
}
@Override
public void onStart() {
super.onStart();
// Start listening for Firestore updates
if (mAdapter != null) {
mAdapter.startListening();
}
}
@Override
public void onStop() {
super.onStop();
if (mAdapter != null) {
mAdapter.stopListening();
}
}
@Override
public void onHorarioProfissionaisSelected(DocumentSnapshot horario) {
HorariosProfissionais idHorario = horario.toObject(HorariosProfissionais.class);
Toast.makeText(Agenda_profissionais.this, "Horario selecionado: " +idHorario.getHora(), Toast.LENGTH_LONG).show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_agendamento, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Respond to the action bar's Up/Home button
case android.R.id.home:
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
finish();
}
}