0
我有一個自定義TextView
,我在自定義GridView
適配器中使用。自定義TextView
正在使用自定義字體進行翻譯。在缺省情況下安裝了語言環境的設備中,這種方式非常有效。奇怪的行爲與CustomAdapter和CustomTextView
但是,在未安裝語言的設備中,顯示出奇怪的行爲。當應用第一次加載時,TextViews
不會顯示自定義字體。但是,當我按刷新按鈕重新加載片段時,TextViews
顯示自定義字體。
我不知道爲什麼會發生這種情況。
這發生在我使用自定義TextView
的應用程序中的所有自定義Adapters
。
非常基本的適配器:
public class CalendarWeekAdapter extends BaseAdapter{
private String[] weekdays;
Context mContext;
private LayoutInflater mInflater;
public CalendarWeekAdapter(Context context, int firstDay)
{
mContext=context;
mInflater = LayoutInflater.from(context);
weekdays = context.getResources().getStringArray(R.array.weekdays);
}
public int getCount()
{
return weekdays.length;
}
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=null;
if(convertView==null)
{
convertView = mInflater.inflate(R.layout.calendar_week, parent,false);
holder = new ViewHolder();
holder.txtWeekdays=(CustomTextView)convertView.findViewById(R.id.weekdays);
if(position==0)
{
convertView.setTag(holder);
}
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.txtWeekdays.setText(weekdays[position]);
return convertView;
}
}
class ViewHolder
{
CustomTextView txtWeekdays;
}
基本CustomTextView:
public class CustomTextView extends TextView {
public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomTextView(Context context) {
super(context);
init();
}
private void init() {
if (!isInEditMode()) {
setTypeface(Utils.getFont(getContext()));
}
}
}
如果我僅從'convertView.setTag(holder)'附近刪除'ifs',它仍然顯示相同的行爲,即沒有字體。但是,如果我完全刪除了'if'('if(convertView == null)'),那麼它的工作效果令人驚訝。刪除if(convertView)== null'是否是好習慣? – input
不,如果您沒有檢查convertView == null,那麼您可能會用完資源,爲列表項目創建太多視圖並繞過視圖回收。尊重convertView!= null並重新使用它們這一事實是一種很好的做法。 –
如果你不使用'parent'參數會怎麼樣(我通過'''而不是'parent'來更改'原始答案'中的示例)。 –