ERROR: "No se puede resolver el contexto del símbolo" al intentar cargar imágenes usando Glide en RecyclerView

George B

He construido una aplicación para tomar notas con Room, ViewModel, LiveData, y RecyclerViewel uso de este tutorial . Todo está funcionando muy bien. Sin embargo, cuando comencé a implementar la capacidad de seleccionar una imagen para cada nota, el proceso se RecyclerViewvolvió muy lento y lento a medida que se agregaban más notas con imágenes.

Después de investigar un poco, descubrí que el uso de marcos de carga de imágenes como Glidey Picassopuede hacer que la carga sea más rápida. Entonces, intenté usar Glide para cargar imágenes desde un Uri en los elementos de 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;
}

}

Sin embargo, Android Studio me da el siguiente error - Cannot resolve symbol 'context'. Mi pregunta es, ¿en qué contexto debería pasar para este argumento? Además, cualquier otra sugerencia para hacer que RecyclerView sea más rápido al cargar imágenes será muy apreciada. ¡Gracias!

PD: No soy un profesional en absoluto, y solo programo como un pasatiempo, así que me disculpo por cualquier término mal utilizado.

Mohammad Sommakia

necesitas definir la variable global

 Context context ;

y cambie su código a lo siguiente:

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

}

....

}

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo