2011-01-02 15 views
5

सरल लेकिन बहुत कम मुश्किल है, अगर मैं<Spanned> को list.setAdapter में कैसे रखा जाए?

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

है यह काम करता है अगर articleItemsHelperस्ट्रिंग है, लेकिन मैं एचटीएमएल वहाँ में स्वरूपण तो टाइप articleItemsHelper है जब फैला इस (अनुकूलक) है चाहता हूँ काम नहीं करता

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

समाधान क्या है?

संपादित करें: यहाँ समाधान है - कस्टम एडाप्टर

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

तो बस नियमित रूप से

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

फोन जहां

articleItemsHelper 

है
ArrayList<Spanned> 

उत्तर

0

यह कैसे ArrayAdapter पंक्तियों का पाठ सेट किया गया है:

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

आप देख सकते हैं, यह आपके मामले में क्या करेंगे toString विधि कॉल करने के लिए है, और यही कारण है यह काम नहीं करता है। तो, आगे बढ़ें और अपना खुद का एडाप्टर लिखें, आपके पास इस मामले में कोई विकल्प नहीं है।

+1

ओह, tnx। मैंने ऊपरी पद में समाधान पोस्ट किया। – svenkapudija

+0

वास्तव में अच्छा, दोस्त! – Cristian

0

पुराने धागा है, लेकिन मैं यह करने के लिए एक अन्य रास्ता मिल गया है, यह लोगों की मदद कर सकते हैं:

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; 
      } 
    }; 
संबंधित मुद्दे