我有一个列表,其中显示了一些联系人。为了简化操作,列表的最后一个元素是添加另一个联系人的添加按钮。添加按钮是使用特殊字体的+图标。我遇到的问题和它让我发疯的是,当我向下滚动列表然后回来时,有时(并非总是)顶部联系人将其字体更改为此特殊字体,如果我向下滚动它会发生相同对其他人。你知道问题是什么吗?
这是我的适配器:
public class CustomAdapter extends BaseAdapter {
private ArrayList<Contact> _data;
private Typeface font;
Context _c;
CustomAdapter (ArrayList<Contact> data, Context c, Typeface font){
_data = data;
_c = c;
this.font=font;
}
public int getCount() {
// TODO Auto-generated method stub
return _data.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return _data.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
if (v == null)
{
LayoutInflater vi = (LayoutInflater)_c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_single, null);
}
ImageView image = (ImageView) v.findViewById(R.id.photo_single);
TextView name = (TextView)v.findViewById(R.id.name_single);
Contact msg = _data.get(position);
image.setImageBitmap(msg.getBlurredPhoto());
name.setText(msg.getName());
//to make sure that the font only applies to the add button, I also gave it
//the phone number "1"
if((position==_data.size()-1)&&(msg.getNumber().equals("1"))){
name.setTypeface(font);
name.setText(R.string.icon_add);
name.setTextColor(0xFF2c3e50);
}
return v;
}
}
这是它的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/photo_single"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:scaleType="centerCrop"
/>
<TextView
android:id="@+id/name_single"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="40sp"
android:textColor="#FFFFFF" />
答案 0 :(得分:2)
您正在回收行,但您永远不会重置字体。如果您致电setTypeface()
在特殊行上设置特殊字体,则还需要调用setTypeface()
以返回常规行上的常规字体。
或者,实施getViewTypeCount()
和getItemViewType()
,因此您的特殊字体行会与其他类型的行分开回收。