2011-01-02 14 views
5

simple pero poco complicado, si tengo¿Cómo poner <Spanned> en list.setAdapter?

list.setAdapter(new ArrayAdapter<String>(this,R.layout.double_row, R.id.doubleRow, articleItemsHelper)); 

funciona si articleItemsHelper es cadena, pero yo quiero tener el formato HTML allí así que cuando articleItemsHelper es de tipo abarcó esto (adaptador) no funciona

ArrayList<Spanned> articleItemsHelper = new ArrayList<Spanned>(); 

¿Cuál es la solución?

EDIT: aquí está la solución - adaptador personalizado

private static class SpannedAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    private ArrayList<Spanned> mArticleList; 

    public SpannedAdapter(Context context, ArrayList<Spanned> articleList) { 
     mInflater = LayoutInflater.from(context); 
     mArticleList = articleList; 
    } 

    public int getCount() { 
     return mArticleList.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.single_row, null); 
      holder = new ViewHolder(); 
      holder.text = (TextView) convertView.findViewById(R.id.singleRow); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     holder.text.setText(mArticleList.get(position)); 

     return convertView; 
    } 

    static class ViewHolder { 
     TextView text; 
    } 
} 

A continuación, sólo llamar regularmente

list.setAdapter(new SpannedAdapter(this, articleItemsHelper)); 

donde

articleItemsHelper 

es

ArrayList<Spanned> 

Respuesta

0

Así es como ArrayAdapter establece el texto de las filas:

T item = getItem(position); 
    if (item instanceof CharSequence) { 
     text.setText((CharSequence)item); 
    } else { 
     text.setText(item.toString()); 
    } 

Como se puede ver, lo que haría en su caso es llamar al método toString, y es por eso que no funciona. Entonces, adelante y escriba su propio adaptador, no tiene otra opción en este caso.

+1

Oh, TNX. Publiqué la solución en la publicación superior. – svenkapudija

+0

¡Muy bien, amigo! – Cristian

0

hilo viejo, pero me encontré con una otra manera de hacerlo, puede ayudar a la gente:

simpleAdpt = new ArrayAdapter<Note>(this, R.layout.notelist, listeNotes){ 
      public View getView(int position, View view, ViewGroup viewGroup) 
      { 
       View v = super.getView(position, view, viewGroup); 
       Note n = (Note) this.getItem(position); 
       ((TextView)v).setText(Html.fromHtml("<b>"+n.getTitre() + "</b> <br/>"+n.getNote())); 
       return v; 
      } 
    };