2017-11-15 27 views
0

calendarViewで新しい日付が選択されたときにカレンダービューの日付と等しい日付の予定のみが表示されるように、listViewを自分のCalenderViewと同期したい私はFirebaseリアルタイムデータベースを使用しています。これを動作させることを考えている唯一の方法は、選択が行われるたびにデータベースを更新することですが、これを行うには最適で正しい方法だとは思いません。他のクラスが必要な場合は、以下のクラスを添付しました。追加することもできます。私はあまりにも明快に画面のイメージを添付しています。事前のおかげでCalenderView日付のlistView日付を更新する方法

enter image description here

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) { 

     } 


    }); 
    }; 

答えて

0

次の2つのリストを作成することができます。アダプターの別のリストがバックアップ用に1つあります。カレンダーリスナーがあなたを解雇したとき、あなたはこのような方法を作ることができます

addList(){ 
list1.clear(); // main list clear 
list1.addAll(list2) // backup list added 
} 
+0

この2番目のリストのアイテムはどのように入手できますか?私は時間のその時点で "テーブル"のスナップショットが必要ですが、私はそれをアクセスする方法を知らない –

+0

あなたが最初のリストを取得するときには、 –

関連する問題