我的自定义适配器有一个奇怪的问题......它只打印前两个元素(我的列表视图的前 2 个文本视图)。相同的代码适用于没有 Listview 的简单文本视图。我不明白我做错了什么
自定义适配器
public class CustomAdapter extends ArrayAdapter<Avviso> {
Context context;
public CustomAdapter(Context context, int textViewResourceId, List<Avviso> objects) {
super(context, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getViewOptimize(position, convertView, parent);
}
public View getViewOptimize(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.rowcustom, null);
viewHolder = new ViewHolder();
viewHolder.testoavviso = (TextView)convertView.findViewById(R.id.textViewtitolo);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Avviso avviso = getItem(position);
viewHolder.testoavviso.setText(avviso.getTestoavviso());
return convertView;
}
private class ViewHolder {
public TextView testoavviso;
}
}
avvisi.java
public class Avvisi extends Activity {
// blog url
static final String BLOG_URL = "http://www.miosito.com"
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
// set layout view
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_avvisi);
try {
getlink task = new getlink();
task.execute("Process started!");
//la stringa verra passata al metodo doInBackground del nostro AsyncTask
//per controllare lo stato del task, possiamo chiamare task.getStatus()
} catch (Exception ex) {
((TextView)findViewById(R.id.avviso1)).setText("Error");
}
}
private class getlink extends AsyncTask<String, String, List<Avviso>> {
// I tre tipi da dichiarare sono relativamente (in questo caso usiamo solo stringhe)
// il parametro in entrata di doInBackground (quando chiamiamo execute passiamo una stringa)
// il paramentro in entrata di onProgressUpdate (dati che vogliamo mostrare all' utente -opzionale,potremmo usare variabili globali-)
// il parametro in entrata di onPostExecure (una volta finito il task, potremmo voler mostrare un risultato all'utente)
// nel caso non volessimo usare parametri di alcun genere tipizziamo con Void,Void,Void (passeremo poi dei null come parametri)
ListView listView = (ListView)findViewById(R.id.listavvisi);
List<Avviso> avvisi = new LinkedList<Avviso>();
@Override
protected List<Avviso> doInBackground(String... arg) {
// stringa passata a onProgressUpdate
String result = "";
Document doc = null;
try {
doc = Jsoup.connect(BLOG_URL).get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Elements links = doc.select("td.AVVISI-FORMAT-DEFAULT > a[href]");
int j=0;
int numavvisi = links.size();
for (Element link : links) {
if((j %2!=0) && (j<60)) {
String testonews = link.text();
String urlavviso= link.attr("abs:href");
int lunghezzanews = testonews.length();
if(lunghezzanews<80) {
avvisi.add(new Avviso(testonews));
} else {
avvisi.add(new Avviso(testonews.substring(0,80)));
}
} else {
j++;
}
}
return avvisi;
}
@Override
protected void onProgressUpdate(final String... values){
}
protected void onPostExecute(List<Avviso> avvisi) {
CustomAdapter adapter = new CustomAdapter(Avvisi.this, R.layout.rowcustom, avvisi);
listView.setAdapter(adapter);
}
}
}