gpt4 book ai didi

java - CustomAdapter 和 CustomTextView 的奇怪行为

转载 作者:行者123 更新时间:2023-12-01 14:52:07 25 4
gpt4 key购买 nike

我有一个自定义 TextView,我在自定义 GridView 适配器中使用它。自定义 TextView 使用自定义字体进行翻译。这在默认安装了语言环境的设备中效果相当好。

但是,在未安装该语言的设备中,它会显示奇怪的行为。首次加载应用时,TextViews 不会以自定义字体显示。但是,当我按刷新按钮重新加载 fragment 时,TextViews 显示为自定义字体。

我不确定为什么会发生这种情况。

我使用自定义 TextView 的应用程序中的所有自定义 Adapter 都会发生这种情况。

非常基本的适配器:

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

基本自定义 TextView :

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()));
}
}
}

最佳答案

这可能不是答案,但我不明白这个 if 语句:

                 holder.txtWeekdays=(CustomTextView)convertView.findViewById(R.id.weekdays);
if(position==0)
{
convertView.setTag(holder);
}

为什么会在那里?所有新膨胀的convertViews 都应该有holder 作为它们的标签。只需删除 ConvertView.setTag(holder) 周围的“if”即可:

          if(convertView==null)
{
convertView = mInflater.inflate(R.layout.calendar_week, null,false);
holder = new ViewHolder();
holder.txtWeekdays=(CustomTextView)convertView.findViewById(R.id.weekdays);
convertView.setTag(holder);
}
...

看看这是否会改善甚至解决您的情况。

关于java - CustomAdapter 和 CustomTextView 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com