2011-01-02 1 views
5

Einfach, aber etwas schwierig, wenn ichWie setzen Sie <Spanned> in list.setAdapter?

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

haben es funktioniert, wenn articleItemsHelper ist String, aber ich möchte HTML so dort die Formatierung, wenn articleItemsHelper ist der Typ Spanned diese (Adapter) funktioniert nicht.

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

Was ist die Lösung?

EDIT: Hier ist die Lösung - kundenspezifische Adapter

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

Dann rufen Sie einfach regelmäßig

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

wo

articleItemsHelper 

ist

ArrayList<Spanned> 

Antwort

0

Dies ist, wie ArrayAdapter den Text der Zeilen festgelegt:

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

Wie Sie sehen können, was es in Ihrem Fall tun würde, ist die toString Methode aufzurufen, und das ist, warum es nicht funktioniert. Also, gehen Sie weiter und schreiben Sie Ihren eigenen Adapter, Sie haben in diesem Fall keine Wahl.

+1

Oh, tnx. Ich habe die Lösung im oberen Post geschrieben. – svenkapudija

+0

Wirklich nett, Alter! – Cristian

0

Alt Faden, aber ich fand einen anderen Weg, es zu tun, kann es den Menschen helfen:

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; 
      } 
    }; 
Verwandte Themen