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

sve*_*ija 5 android listview list arraylist spanned

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

list.setAdapter(new ArrayAdapter<String>(this,R.layout.double_row, R.id.doubleRow, articleItemsHelper));
Run Code Online (Sandbox Code Playgroud)

如果articleItemsHelperString,它可以工作,但我想在那里有HTML格式,所以当articleItemsHelper类型为Spanned时,这个(适配器)不起作用.

ArrayList<Spanned> articleItemsHelper = new ArrayList<Spanned>();
Run Code Online (Sandbox Code Playgroud)

解决方案是什么?

编辑:这是解决方案 - 自定义适配器

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

然后定期打电话

list.setAdapter(new SpannedAdapter(this, articleItemsHelper));
Run Code Online (Sandbox Code Playgroud)

哪里

articleItemsHelper
Run Code Online (Sandbox Code Playgroud)

ArrayList<Spanned>
Run Code Online (Sandbox Code Playgroud)

Cri*_*ian 0

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

    T item = getItem(position);
    if (item instanceof CharSequence) {
        text.setText((CharSequence)item);
    } else {
        text.setText(item.toString());
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在您的情况下它要做的是调用该toString方法,这就是它不起作用的原因。因此,继续编写您自己的适配器,在这种情况下您别无选择。