如何将 <Spanned> 放入 list.setAdapter?

Posted

技术标签:

【中文标题】如何将 <Spanned> 放入 list.setAdapter?【英文标题】:How put <Spanned> into list.setAdapter? 【发布时间】:2011-06-02 14:43:14 【问题描述】:

简单但有点棘手,如果我有的话

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

如果 articleItemsHelperString 则有效,但我想在其中设置 html 格式,因此当 articleItemsHelper 类型为 Spanned 这个(适配器)不起作用。

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>

【问题讨论】:

【参考方案1】:

旧线程,但我找到了另一种方法,它可以帮助人们:

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

【讨论】:

【参考方案2】:

这是 ArrayAdapter 设置行文本的方式:

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

如您所见,在您的情况下,它会调用toString 方法,这就是它不起作用的原因。所以,继续写你自己的适配器吧,在这种情况下你别无选择。

【讨论】:

哦,tnx。我在上面的帖子中发布了解决方案。

以上是关于如何将 <Spanned> 放入 list.setAdapter?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图片放入页脚标签中? [复制]

如何将这些代码放入 Angular2 组件

如何将数据放入请求正文

如何随机从数组中获取随机字符串项,并将字符串单词的每个字符随机放入li标签中

将 HTML 放入 JSON

将数组的内容作为列表元素添加到无序列表中。