2016-05-13 40 views
0

我目前正在構建一個Android議程活動,它包含4個ListView。基本上,我得到了一個WebServiceCoordinator調用的方法onAgendaDataReady(ArrayList約會)。此方法對約會進行排序,並以此方式填充4個新的ArrayList。代碼如下:與ArrayList使用ArrayAdapter

@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(); 
} 

此代碼工作,但我不想再使用android.R.layout.simple_list_item_1佈局。所以我用自定義佈局構建了一個ArrayAdapter。 我的問題是:如何將由onAgendaDataReady()創建的ArrayList傳遞給我的Adapter?

我試着這樣做:

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

但appointmentItemAdapter需要預約,而不是一個ArrayList。

感謝您的幫助

---------------最終的解決方案-----------------

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

回答

0

我認爲你在這裏混合不同的東西。

您的自定義適配器採取一個ArrayList(或任何託收)作爲輸入參數,返回當前項目添加到列表(基於查詢的位置)

所以它不是足以通過一個單一的約會作爲參數。

+0

所以我首先要將我的類聲明更改爲:public class AppointmentItemAdapter extends ArrayAdapter >'' – Eliott

+0

不,ArrayAdapter 應該沒問題。看看ArrayAdapter的構造函數: http://developer.android.com/reference/android/widget/ArrayAdapter.html 它採用您選擇的類型T的列表或集合。 –

+0

是的,謝謝!我正在使用add()而不是addAll()...它工作,非常感謝 – Eliott