【发布时间】:2014-06-11 14:57:09
【问题描述】:
我有一个自定义适配器:
public class SoluzioniAdapter extends ArrayAdapter<String>{
//riferimenti statici alle risorse e agli id
private final static int LAYOUT = R.layout.riga_soluzioni;
private final static int PARTENZA = R.id.partenza;
private final static int ARRIVO = R.id.arrivo;
private final static int DATA = R.id.data;
ArrayList<String> partenze; //lista delle partenze
ArrayList<String> arrivi; //lista degli arrivi
ArrayList<String> date; //lista delle date
Context c; //context
LayoutInflater inflater; //layout inflater
public SoluzioniAdapter(Context context,ArrayList<String> partenze,ArrayList<String> arrivi,ArrayList<String> date )
{
super(context,PARTENZA);
this.c = context;
this.partenze = partenze;
this.arrivi = arrivi;
this.date = date;
this.inflater = LayoutInflater.from(c);
}
@Override
public int getCount()
{
return partenze.size(); //ritorno lunghezza lista ( = numero dei titoli)
}
//quando la lista richiede una view
@Override
public View getView(int pos,View view,ViewGroup parent)
{
CacheRiga cache; //cache
if(view==null)//se è la prima volta che viene richiesta la view
{
// creo la view ma non l'attacco alla lista in quanto devo ancora modificare
// i testi delle textview
view = inflater.inflate(LAYOUT, parent,false);
cache = new CacheRiga(); //inizializzo la cache
cache.partenza = (TextView) view.findViewById(PARTENZA); //collego titolo
cache.arrivo = (TextView) view.findViewById(ARRIVO);//collego descrizione
cache.data = (TextView) view.findViewById(DATA);//collego descrizione
view.setTag(cache);//collego view con cache
}
else
{
cache = (CacheRiga) view.getTag(); //altrimenti prendo la cache dalla view
}
cache.partenza.setText(partenze.get(pos)); //imposto il titolo
cache.arrivo.setText(arrivi.get(pos)); // e la descrizione
cache.data.setText(date.get(pos)); // e la descrizione
return view;
}
private class CacheRiga { // classe per la cache delle righe
public TextView partenza; // cache titolo
public TextView arrivo; // cache descrizione
public TextView data; // cache descrizione
}
}
我已经通过了partenza、arrivo 和data 在我的列表中。
private static class SoluzioniLoader extends AsyncTaskLoader<List<Soluzione>> {
private FermataComune partenza;
private FermataComune arrivo;
private String data;
public SoluzioniLoader(Context context, FermataComune partenza, FermataComune arrivo, String data) {
super(context);
this.partenza = partenza;
this.arrivo = arrivo;
this.data = data;
}
@Override
public List<Soluzione> loadInBackground() {
try {
List<Soluzione> soluzioni = Client.cercaCorseAndata(partenza, arrivo, data);
return soluzioni;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
private LoaderCallbacks<List<Soluzione>> mLoaderCallbacks = new LoaderCallbacks<List<Soluzione>>() {
private ProgressDialog pd;
@Override
public Loader<List<Soluzione>> onCreateLoader(int id, Bundle args) {
pd = new ProgressDialog(SoluzioniActivity.this);
pd.setTitle("Caricamento Soluzioni Trovate");
pd.setMessage("Attendi...");
pd.setIndeterminate(false);
pd.show();
return new SoluzioniLoader(SoluzioniActivity.this, partenza, arrivo, data);
}
@Override
public void onLoadFinished(Loader<List<Soluzione>> loader, List<Soluzione> data) {
try {
pd.dismiss();
} catch(Exception e){
}
if (data == null) {
// ERRORE
} else {
SoluzioniAdapter adapter = new SoluzioniAdapter(SoluzioniActivity.this, partenze, arrivi, date);
mListView.setAdapter(adapter);
}
当然它不起作用。我认为因为数组是空的..而且我不明白我现在必须做什么。谢谢
【问题讨论】:
-
对不起,但你不能只是在 SO 上转储一堆代码,说“它不起作用”,然后期待我们神奇地修复它。您需要缩小问题范围,然后具体告诉我们出了什么问题。例如,您说“我认为是因为数组为空”,但您没有告诉我们数组为空是否是错误,或者空数组是否是您的程序无法正确处理的正常情况。如果您不确定变量中的值是否正确,请使用调试器或
Log方法。
标签: java android android-listview custom-adapter