Java 滚动recyclerview时出现延迟
这是我的适配器代码:Java 滚动recyclerview时出现延迟,java,android,Java,Android,这是我的适配器代码: public class CatAdapter extends RecyclerView.Adapter<CatAdapter.ViewHolder> { ArrayList<CatModel> objects_; Context context; Class res = R.drawable.class; public class ViewHolder extends RecyclerView.ViewHolder { TextView
public class CatAdapter extends RecyclerView.Adapter<CatAdapter.ViewHolder> {
ArrayList<CatModel> objects_;
Context context;
Class res = R.drawable.class;
public class ViewHolder extends RecyclerView.ViewHolder {
TextView cat_text,cat_des;
ImageView cat_img;
public ViewHolder(View v) {
super(v);
cat_text = (TextView) v.findViewById(R.id.cat_txt);
cat_des = (TextView) v.findViewById(R.id.cat_des);
cat_img = (ImageView) v.findViewById(R.id.cat_img);
}
}
public CatAdapter(ArrayList<CatModel> arrayList, Context context) {
this.context = context;
objects_ = arrayList;
}
@Override
public CatAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cat_list_view, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.cat_text.setText(objects_.get(position).txt);
holder.cat_des.setText(objects_.get(position).des);
try {
Field field = res.getField(objects_.get(position).img);
int drawableId = field.getInt(null);
holder.cat_img.setImageDrawable(context.getResources().getDrawable(drawableId));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getItemCount() {
return objects_.size();
}
}
CatModel.img
是我放入R.strings
中的drawables
的id。
我的所有项目int
arraylist
大约有20个项目,我的drawables
经过优化SVG
,我将其转换为矢量drawable。但当我滚动时,它不是平滑的。我可以做些什么来优化它?您需要直接使用资源访问您的绘图,而不是使用反射
您应该将您的可绘制内容放在相应的“可绘制内容”文件夹中(可绘制xhdi、可绘制xxhdpi等)。然后在对象中引用与每个可绘制对象关联的int:
public class CatModel {
public String txt,des;
public int drawable;
}
其中drawable是你的一个drawable,比如
CatModel catModel = new CatModel();
catModel.drawable = R.drawable.my_drawable_1;
等等
然后在适配器中使用它,如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.cat_text.setText(objects_.get(position).txt);
holder.cat_des.setText(objects_.get(position).des);
holder.img.setImageResource(objects_.get(position).drawable);
}
您需要直接使用资源而不是反射来访问Drawable 您应该将您的可绘制内容放在相应的“可绘制内容”文件夹中(可绘制xhdi、可绘制xxhdpi等)。然后在对象中引用与每个可绘制对象关联的int:
public class CatModel {
public String txt,des;
public int drawable;
}
其中drawable是你的一个drawable,比如
CatModel catModel = new CatModel();
catModel.drawable = R.drawable.my_drawable_1;
等等
然后在适配器中使用它,如下所示:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.cat_text.setText(objects_.get(position).txt);
holder.cat_des.setText(objects_.get(position).des);
holder.img.setImageResource(objects_.get(position).drawable);
}
您正在onBindViewHolder中使用反射。这是众所周知的缓慢,重构你的代码以避免反射。你能解释更多吗@FrancescYou正在res对象(getField)上使用反射。反射天生很慢,可能会把你推过16毫秒的障碍。我不太清楚你想做什么,但你应该能够为你的可抽文件创建一个列表或哈希图,然后使用该列表或哈希图将一个可抽文件链接到职位。对不起,我是android新手,我想从资源中获取可抽文件,所以我找到了动态链接的方法。你能帮我寄密码吗@弗朗西丝卡,请发布更多关于什么是抽签表,以及它们是如何与该职位相关联的信息,以便我更好地了解您正在尝试做什么。我需要知道什么是可绘制的以及对象中有什么。同时发布CatModel对象。您正在onBindViewHolder中使用反射。这是众所周知的缓慢,重构你的代码以避免反射。你能解释更多吗@FrancescYou正在res对象(getField)上使用反射。反射天生很慢,可能会把你推过16毫秒的障碍。我不太清楚你想做什么,但你应该能够为你的可抽文件创建一个列表或哈希图,然后使用该列表或哈希图将一个可抽文件链接到职位。对不起,我是android新手,我想从资源中获取可抽文件,所以我找到了动态链接的方法。你能帮我寄密码吗@弗朗西丝卡,请发布更多关于什么是抽签表,以及它们是如何与该职位相关联的信息,以便我更好地了解您正在尝试做什么。我需要知道什么是可绘制的以及对象中有什么。也发布CatModel对象。为什么我没想到呢!我可以从值中获取drawables int吗?是的,通过R类使用与每个drawables关联的int值。在这种情况下,您需要使用SysTrace来找出是什么阻塞了UI,但是这里的代码不应该造成任何延迟。为什么我没有想到这一点!我可以从值中获取drawables int吗?是的,通过R类使用与每个drawables关联的int值。在这种情况下,您需要使用SysTrace来确定是什么阻塞了UI,但是这里的代码不应该造成任何延迟。