java - 错误 - 尝试在 RecyclerView 中使用 Glide 加载图像时出现“无法解析符号‘上下文’”
问题描述
Room
我已经用、ViewModel
、LiveData
和RecyclerView
使用本教程构建了一个笔记应用程序。一切运作良好。然而,当我开始实现为每个音符选择图像的功能时,RecyclerView
随着添加更多带有图像的音符,变得非常缓慢和缓慢。
Glide
经过一番研究,我发现使用图像加载框架Picasso
可以使加载速度更快。因此,我尝试使用 Glide 将图像从 Uri 加载到 RecyclerView 项目中。
NoteAdapter.java
public class NoteAdapter extends ListAdapter<Note, NoteAdapter.NoteHolder> {
Context context;
public NoteAdapter() {
super(DIFF_CALLBACK);
}
private static final DiffUtil.ItemCallback<Note> DIFF_CALLBACK = new DiffUtil.ItemCallback<Note>() {
@Override
public boolean areItemsTheSame(@NonNull Note note, @NonNull Note t1) {
return note.getId() == t1.getId();
}
@Override
public boolean areContentsTheSame(@NonNull Note note, @NonNull Note t1) {
return note.getTitle().equals(t1.getTitle()) && note.getDescription().equals(t1.getDescription()) && note.getImageUri().equals(t1.getImageUri());
}
};
private OnItemClickListener listener;
@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.note_item, viewGroup, false);
return new NoteHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull NoteHolder noteHolder, int i) {
Note currentNote = getItem(i);
noteHolder.textViewTitle.setText(currentNote.getTitle());
noteHolder.textViewDescription.setText(currentNote.getDescription());
Glide.with(context)
.load(Uri.parse(currentNote.getImageUri()))
.fit()
.centerCrop()
.into(noteHolder.image);
}
public Note getNoteAt(int position) {
return getItem(position);
}
class NoteHolder extends RecyclerView.ViewHolder {
private TextView textViewTitle;
private TextView textViewDescription;
private ImageView image;
public NoteHolder(@NonNull View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.text_view_title);
textViewDescription = itemView.findViewById(R.id.text_view_description);
image = itemView.findViewById(R.id.image_view);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (listener != null && position != RecyclerView.NO_POSITION) {
listener.onItemClick(getItem(position));
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(Note note);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
}
但是,Android Studio 给了我以下错误 - Cannot resolve symbol 'context'
。我的问题是,我应该为这个论点传递什么上下文?此外,非常感谢您在加载图像时使 RecyclerView 更快的任何其他建议。谢谢!
PS -我不是专业人士,只是将编程作为一种爱好,所以对于任何滥用的术语,我深表歉意。
解决方案
你需要定义全局变量
Context context ;
并将您的代码更改为以下内容:
public class NoteAdapter extends ListAdapter<Note, NoteAdapter.NoteHolder> {
....
Context context;
@NonNull
@Override
public NoteHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
context = viewGroup.getContext();
View itemView = LayoutInflater.from(context).inflate(R.layout.note_item, viewGroup, false);
return new NoteHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull NoteHolder noteHolder, int i) {
Note currentNote = getItem(i);
noteHolder.textViewTitle.setText(currentNote.getTitle());
noteHolder.textViewDescription.setText(currentNote.getDescription());
Glide.with(context)
.load(Uri.parse(currentNote.getImageUri()))
.fit()
.centerCrop()
.into(noteHolder.image);
}
....
}
推荐阅读
- spring-boot - 如何在 axon 中实现读(查询)模型和写(命令)模型之间的完全一致性
- php - PHP 7.2.14 json_decode 函数对浮点值进行四舍五入
- javascript - 将输入类型颜色转换为圆形
- mysql - mysql比较ip地址
- c# - TypeScript 编译中缺少文件 custom.ts。请通过 'files' 或 'include' 属性确保它在您的 tsconfig 中
- javascript - JDBC 驱动程序从 mysql 返回错误的值
- grafana - Grafana - 如何绘制动态传递的每个变量的指标
- docker - Docker 看不到 main.go
- python - 不能将 queue.put 与 keras 模型一起使用
- r - 控制哪些节点改变大小 igraph