2011-01-02 25 views
5

đơn giản nhưng ít phức tạp, nếu tôi cóCách đặt <Spanned> vào list.setAdapter?

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

nó hoạt động nếu articleItemsHelperChuỗi, nhưng tôi muốn có định dạng HTML trong đó nên khi articleItemsHelper là gõ Spanned này (adaptor) không hoạt động.

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

Giải pháp là gì?

EDIT: đây là giải pháp - tùy chỉnh bộ chuyển đổi

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

Sau đó chỉ cần thường xuyên gọi

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

nơi

articleItemsHelper 

ArrayList<Spanned> 

Trả lời

0

Đây là cách ArrayAdapter thiết lập các văn bản của các hàng:

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

Như bạn thấy, những gì nó sẽ làm gì trong trường hợp của bạn là để gọi phương thức toString, và đó là lý do tại sao nó không hoạt động. Vì vậy, hãy tiếp tục và viết bộ điều hợp riêng của bạn, bạn không có lựa chọn nào trong trường hợp này.

+1

Oh, tnx. Tôi đã đăng giải pháp ở bài đăng trên. – svenkapudija

+0

Thật tuyệt, anh bạn! – Cristian

0

Cũ chủ đề nhưng tôi tìm thấy một cách khác để làm điều đó, nó có thể giúp mọi người:

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; 
      } 
    }; 
Các vấn đề liên quan