字体不在自定义ArrayAdapter中

时间:2014-01-29 18:37:35

标签: java android android-arrayadapter

我有这个自定义数组适配器:

public class CustomAdapter extends ArrayAdapter<DataObj> 
{
int                     layoutResourceId;
List<DataObj>   data;
Activity                activity;
Typeface                iconFont;

public CustomAdapter(Activity activity, int layoutResourceId, List<DataObj> data)
{
    super(activity, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.activity = activity;
    this.data = data;
    iconFont = Typeface.createFromAsset(activity.getAssets(), "icons.ttf" );
}

public static class ViewHolder
{
    public TextView icon;
    public TextView name;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{
    View row = convertView;
    ViewHolder holder;

    if (row == null) 
    {
        LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.event_type_list_row, null);
        holder = new ViewHolder();
        holder.icon = (TextView) row.findViewById(R.id.layout_icon_EditText);
        holder.name = (TextView) row.findViewById(R.id.layout_name_EditText);
        row.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) row.getTag();
    }
    final DataObj obj = data.get(position);
    if (eventType != null) 
    {
        holder.icon.setText(obj.getIconCode());
        holder.icon.setTypeface(iconFont);
        holder.name.setText(obj.getName());
    }

    return row;
}

}

而不是图标我看到代码(我使用IcoMoon作为我的图标字体)。可以看到我的应用程序中静态创建的其他图标,但在这里我看到了: enter image description here 我的代码出了什么问题?

以下是它静态时的工作原理(它不是图像,它是IcoMoon的字体): enter image description here

注意:我尝试使用其他字体(不是图标字体)并且它有效,似乎只有图标字体不起作用。

5 个答案:

答案 0 :(得分:0)

为什么你不尝试:

TextView text = new TextView();

String str = "some text";
SpannableStringBuilder sb = new SpannableStringBuilder(str);
            sb.setSpan(iconFont, 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            text.setTextSize(18);
            text.setText(sb);

答案 1 :(得分:0)

问题在于设置字体。当eventType不为null但您在eventType为null时重置它时,您正在设置字体。一旦单元格具有字体集,当eventType为null时,它可能会再次被重用。在这种情况下,holder.icon仍将使用旧字体而不是默认字体。

if (eventType != null) 
{
    holder.icon.setText(obj.getIconCode());
    holder.icon.setTypeface(iconFont);
    holder.name.setText(obj.getName());
} else {
    holder.icon.setTypeface(defaultFont);
    ...
}

答案 2 :(得分:0)

你正试图将图像设置为文本,因此如果我没有弄错的话,它会显示出来。看看这个答案,它会帮助你。 How to use icons and symbols from "Font Awesome" on Native Android Application

答案 3 :(得分:0)

您确定名称是否正确?

当你这样做时:

iconFont = Typeface.createFromAsset(activity.getAssets(), "icons.ttf" );

“图标” 字体的正确名称是什么?

除此之外,由于字体总是相同的,你可以在持有人内声明它。

holder = new ViewHolder();
holder.icon = (TextView) row.findViewById(R.id.layout_icon_EditText);
holder.name = (TextView) row.findViewById(R.id.layout_name_EditText);
holder.icon.setTypeface(iconFont);
row.setTag(holder);

答案 4 :(得分:0)

为我解决的是这样做:

holder.icon.setText(Html.fromHtml(eventType.getIconCode()));