0
私には、特定のユーザのスケジュールが表示される画面があります。
しかし、同時にスケジュールが既に使用されているかどうかを確認し、背景をより暗い色にする必要があります。
印刷1:スケジュール付きRecyclerView画面。
印刷2:同じ画面ですが、利用可能なスケジュールを確認した後です。
注:私たちがWi-Fiネットワークに接続している場合、充電は高速ですが、モバイルインターネットネットワークの場合は非常に遅いです。
私は正確にスケジュールのチェックが行われた瞬間に、私のアダプタ内ProgressDialogを追加するために、いくつかの方法が必要です。ここで
:
/*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 {
}
}
});
注:これは素晴らしい方法ではないことかもしれません。私は、RecyclerViewでこのクエリを実行するより良い方法があると示唆しています。
コードのフル - アダプタ:
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);
}
}
});
}
}
}
コードのフル - 活動:
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();
}
}