【问题标题】:Can't understand how insert data in list from adapter [closed]无法理解如何从适配器在列表中插入数据 [关闭]
【发布时间】: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
}

}

我已经通过了partenzaarrivodata 在我的列表中。

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


【解决方案1】:

在本节中,您使用的是适配器,但我看不到您何时填写“partenze”、“arrivi”和“date”。

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

我认为这些值在 List&lt;Soluzione&gt; soluzioni 中,但您必须将这些值放在其他三个数组中,或者只在适配器中传递 Soluzione 的数组

【讨论】:

  • 是的,Soluzione 包含一个名为 Corsa 的 ArrayList。 Corsa 是一个包含我传递的对象的类。
  • 你能帮我解决吗?我认为方法是在适配器中传递数组 Soluzione,但我不明白怎么做。
  • @End.Game 你能发布 Soluzione 类,看看如何让它工作吗?
  • 我在几分钟前解决了 :) 无论如何,谢谢。我接受你的回答,因为这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多