Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滚动recyclerview时出现延迟_Java_Android - Fatal编程技术网

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,但是这里的代码不应该造成任何延迟。