0
calendarViewで新しい日付が選択されたときにカレンダービューの日付と等しい日付の予定のみが表示されるように、listViewを自分のCalenderViewと同期したい私はFirebaseリアルタイムデータベースを使用しています。これを動作させることを考えている唯一の方法は、選択が行われるたびにデータベースを更新することですが、これを行うには最適で正しい方法だとは思いません。他のクラスが必要な場合は、以下のクラスを添付しました。追加することもできます。私はあまりにも明快に画面のイメージを添付しています。事前のおかげでCalenderView日付のlistView日付を更新する方法
package com.example.steph.fyp;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.ExpandableListView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Random;
public class BookAppointment extends AppCompatActivity {
ListView listViewAppointments;
DatabaseReference databaseAppointment;
List<Appointment> appointmentList;
DateHelper dateHelper = new DateHelper();
CalendarView calendarView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_appointment);
listViewAppointments = (ListView) findViewById(R.id.listview_appointments);
calendarView = (CalendarView) findViewById(R.id.calendar_view);
//getting the reference of appointments node
databaseAppointment = FirebaseDatabase.getInstance().getReference("appointments");
appointmentList = new ArrayList<>();
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
}
});
listViewAppointments.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//getting the selected appointment
Appointment appointment = appointmentList.get(i);
showUpdateDialog(appointment.getId(), appointment.getDate());
}
});
}
private boolean updateAppointmentBooked(String id, long date) {
//getting the specified appointments reference
DatabaseReference dR = FirebaseDatabase.getInstance().getReference("appointments").child(id);
//updating appointment
Appointment appointment = new Appointment(id, date, true);
dR.setValue(appointment);
Toast.makeText(getApplicationContext(), "Booking Successful", Toast.LENGTH_LONG).show();
return true;
}
private void showUpdateDialog(final String appointmentId, final long appointmentDate){
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.book_appointment_dialog, null);
dialogBuilder.setView(dialogView);
final TextView textViewDate = (TextView) dialogView.findViewById(R.id.textview_date);
final TextView textViewTime = (TextView) dialogView.findViewById(R.id.textview_time);
final TextView textViewCancel = (TextView) dialogView.findViewById(R.id.textview_cancel);
final Button bookAppointmentButton = (Button) dialogView.findViewById(R.id.book_appointment_button);
textViewDate.setText(dateHelper.toAppointmentDate(appointmentDate));
textViewTime.setText(dateHelper.toAppointmentTime(appointmentDate));
dialogBuilder.setTitle("Confirm Booking");
final AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
bookAppointmentButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updateAppointmentBooked(appointmentId,appointmentDate);
alertDialog.dismiss();
}
});
textViewCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
//alertDialog.dismiss();
}
@Override
protected void onStart() {
super.onStart();
//attaching value event listener
databaseAppointment.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//clearing the previous artist list
appointmentList.clear();
//iterating through all the nodes
for (DataSnapshot appointmentSnapshot : dataSnapshot.getChildren()) {
//getting artist
Appointment appointment = appointmentSnapshot.getValue(Appointment.class);
if(!appointment.isBooked() && dateHelper.isDateSameDay(calendarView.getDate(), appointment.getDate())){
//adding appointment to the list
appointmentList.add(appointment);
}
}
//creating adapter
AppointmentList appointmentAdapter = new AppointmentList(BookAppointment.this, appointmentList);
//attaching adapter to the listview
//expandableListViewAppointments.setAdapter(expandableListViewAdapter);
listViewAppointments.setAdapter(appointmentAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
};
この2番目のリストのアイテムはどのように入手できますか?私は時間のその時点で "テーブル"のスナップショットが必要ですが、私はそれをアクセスする方法を知らない –
あなたが最初のリストを取得するときには、 –