我是android中的recycler视图的新手,我正在设计文本的样式,所以我已经做了如下的工作:我的适配器类。
公共类myadapter扩展了recyclerview.adapter{
私有字符串[]mdataset;
private arrayList mcontactdata=new arrayList();
语境;
//为每个数据项提供对视图的引用
//复杂的数据项可能需要每个项有多个视图,并且
//提供对视图保持器中数据项的所有视图的访问
公共静态类viewholder扩展了recyclerview.viewholder{
//在本例中,每个数据项只是一个字符串
公共文本视图mphonenumber;
公共文本视图mcontactname;
公共文本视图mcallduration;
公共文本视图mcalltype;
私有文本视图mcalltime;
公众观众{
超级(V);
mphonEnumber=(textView)v.findViewByID(R.ID.phone_number);
mcontactname=(文本视图)v.findviewbyid(r.id.name\u文本);
mcallduration=(textview)v.findviewbyid(r.id.call_duration_text);
mcalltype=(textview)v.findviewbyid(r.id.call_type);
mcalltime=(文本视图)v.findviewbyid(r.id.date_-time_-text);
}
}
//提供合适的构造函数(取决于数据集的类型)
公共myadapter(arraylist mcontactdata,上下文上下文){
this.mcontactdata=mcontactdata;
this.context=上下文;
}
//创建新视图(由布局管理器调用)
@覆盖
public myadapter.viewholder oncreateviewholder(viewgroup parent,int viewtype){
//创建新视图
视图v=layout inflate r.from(parent.getContext()).inflate(r.layout.new_layout,parent,false);
//设置视图的大小、边距、填充和布局参数
viewholder vh=新的viewholder(v);
返回vh;
}
//替换视图的内容(由布局管理器调用)
@覆盖
public void onbindViewHolder(ViewHolder Holder,int position){
//-在此位置从数据集中获取元素
//-用该元素替换视图的内容
typeface typeface_rmedium=typeface.createFromAsset(context.getAssets(),“roboto medium.ttf”);
typeface typeface_rlignt=typeface.createFromAsset(context.getAssets(),“roboto light.ttf”);
holder.mcontactname.settext(mcontactdata.get(position.getcontactname());
holder.mphonEnumber.settext(mcontactData.get(position.getContactNumber());
holder.mphonumber.settypeface(字体);
holder.mcallduration.settext(mcontactdata.get(position.getcallduration()+“秒”);
holder.mcallduration.settypeface(字体)
holder.mcalltime.settext(utility.getFromatedDateTime(long.parseLong(mcontactData.get(position.getCallTime())));
holder.mcalltime.settypeface(字体)
if(mcontactdata.get(position.getContactType().equalSignoreCase(“std”)){
holder.mcalltype.settext(“s”);
}其他{
holder.mcalltype.settext(“l”);
}
}
//返回数据集的大小(由布局管理器调用)
@覆盖
公共int getitemcount(){
返回mcontactData.size();
}
}
在那之后,滚动被延迟了,所以任何人都猜出了什么问题。提前谢谢。
最佳答案
尝试在viewholder构造函数中创建字体并设置字体,如下所示:
public ViewHolder(View v) {
super(v);
mPhoneNumber = (TextView) v.findViewById(R.id.phone_number);
mContactName = (TextView) v.findViewById(R.id.name_text);
mCallDuration = (TextView) v.findViewById(R.id.call_duration_text);
mCallType = (TextView) v.findViewById(R.id.call_type);
mCallTime = (TextView) v.findViewById(R.id.date_time_text);
// Add typeface lines here and remove below lines from onBindViewHolder() Method
Typeface typeface_rMedium = Typeface.createFromAsset(context.getAssets(), "Roboto-Medium.ttf");
Typeface typeface_rLignt = Typeface.createFromAsset(context.getAssets(), "Roboto-Light.ttf");
mPhoneNumber.setTypeface(typeface_rMedium);
mCallDuration.setTypeface(typeface_rLignt);
mCallTime.setTypeface(typeface_rLignt);
}
从
onBindViewHolder()
方法中删除已添加的行。由于项目视图是重复使用的,因此不需要一次又一次地设置字体。这里的问题可能是你为每一个项目创建字体和设置它。
希望这有帮助。
关于java - 在Recycler View 项目中应用字体后,滚动滞后,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35651072/