2016-05-13 6 views
0

Ich baue derzeit eine Android-Agenda Aktivität, die in 4 ListView besteht. Grundlegend habe ich die Methode onAgendaDataReady (ArrayList-Termine), die von einem WebServiceCoordinator aufgerufen wird. Diese Methode sortiert die Termine und füllt 4 neue ArrayList. Der Code ist die folgende:Verwenden ArrayAdapter mit ArrayList

@Override 
public void onAgendaDataReady(ArrayList<Appointment> appointments) { 
    //swipeContainer.setRefreshing(false); 
    alert.hide(); 
    ArrayList<Appointment> appointmentsfuturs = new ArrayList<>(); 
    ArrayList<Appointment> appointmentspasses = new ArrayList<>(); 
    ArrayList<Appointment> appointmentsannules = new ArrayList<>(); 
    ArrayList<Appointment> appointmentsaconfimer = new ArrayList<>(); 

    for (Appointment a : appointments) { 
     if (a.stateId == 2) 
      appointmentsaconfimer.add(a); 
     else if (a.stateId == 6) 
      appointmentsannules.add(a); 
     else if (a.stateId == 5) 
      appointmentspasses.add(a); 
     else if (a.stateId == 4) 
      appointmentsfuturs.add(a); 
    } 

    ArrayAdapter<Appointment> adapterfuturs = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsfuturs); 
    ArrayAdapter<Appointment> adapterpasses = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentspasses); 
    ArrayAdapter<Appointment> adapterannules = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsannules); 
    ArrayAdapter<Appointment> adapteraconfirmer = new ArrayAdapter<>(AgendaActivity.this, android.R.layout.simple_list_item_1, appointmentsaconfimer); 

    rdvFutursListView.setAdapter(adapterfuturs); 
    rdvPassesListView.setAdapter(adapterpasses); 
    rdvAnnulesListView.setAdapter(adapterannules); 
    rdvAConfirmerListView.setAdapter(adapteraconfirmer); 

    adapterfuturs.notifyDataSetChanged(); 
    adapterpasses.notifyDataSetChanged(); 
    adapterannules.notifyDataSetChanged(); 
    adapteraconfirmer.notifyDataSetChanged(); 
} 

Dieser Code funktioniert, aber ich will nicht mehr das android.R.layout.simple_list_item_1 Layout verwenden. Also habe ich einen ArrayAdapter mit einem benutzerdefinierten Layout erstellt. Mein Problem/Frage ist die folgende: Wie übergebe ich die ArrayList erstellt von onAgendaDataReady() an meinen Adapter?

Ich habe versucht, dies zu tun:

appointmentItemAdapter = new AppointmentItemAdapter(this); 
    rdvFutursListView.setAdapter(appointmentItemAdapter); 
    appointmentItemAdapter.add(adapterfuturs); 

Aber die appointmentItemAdapter erfordert einen Termin und nicht eine Arraylist.

Danke für Ihre Hilfe

--------------- ENDLÖSUNG -----------------

AppointmentItemAdapter appointmentFutursItemAdapter = new AppointmentItemAdapter(AgendaActivity.this); 
rdvFutursListView.setAdapter(appointmentFutursItemAdapter); 
appointmentFutursItemAdapter.addAll(appointmentsfuturs); 
appointmentFutursItemAdapter.notifyDataSetChanged(); 

Antwort

0

Ich denke, Sie mischen verschiedene Dinge hier.

Ihr benutzerdefinierter Adapter eine Arraylist zu nehmen hat (oder eine beliebige Collection) als Eingangsparameter und gibt die aktuellen Einträge in die Liste (basierend auf der Position abgefragt)

So ist es nicht ausreichend, um ein einzelnen zu passieren Termin als Parameter

+0

Also muss ich zuerst meine Klassendeklaration zu diesem ändern: 'public class AppointmentItemAdapter erweitert ArrayAdapter >'? – Eliott

+0

Nein, ArrayAdapter sollte in Ordnung sein. Werfen Sie einen Blick auf die Konstruktoren von ArrayAdapter: http://developer.android.com/reference/android/widget/ArrayAdapter.html Es dauert eine Liste oder Sammlung des Typs T Sie wählen. –

+0

Yup danke! Ich habe add() anstelle von addAll() verwendet ... Es funktioniert, vielen Dank – Eliott