2013-01-04 6 views
0

사용자 지정 어댑터에 이상한 문제가 있습니다 ... 첫 번째 두 요소 (내 listview의 첫 번째 2 텍스트 뷰)가 인쇄됩니다. 동일한 코드는 Listview없이 간단한 textviews로 잘 작동합니다. 나는 내가 잘못인쇄가 왜 단지 Listview의 두 textview입니까?

CustomAdapter

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); 
     } 
    } 
}  
+0

'onPostExecute()'에서'avvisi'의 크기는 얼마입니까? – Sam

+0

어떻게 볼 수 있습니까? avvisi.size()? –

+0

그 값을 출력했고 결과는 12입니다. 그래서 어댑터에 문제가 있습니다. –

답변

0

거기에 scrollbar.I에 문제가 있었다 그것을 제거하고 지금은 코드가 잘 작동 한 일을 understan 수 없습니다