Estoy tratando de desarrollar un proyecto de acuerdo con los estándares MVP. En la guía que seguí, el autor creó una clase ViewHolder separada. Intenté hacer lo mismo, pero Adapter se niega a trabajar con ViewHolder por separado.

Hay 2 errores

No se puede resolver el símbolo 'LessonCardView'

'onCreateViewHolder (ViewGroup, int)' en RVAdapter choca con 'onCreateViewHolder (ViewGroup, int)' en 'android.support.v7.widget.RecyclerView.Adapter'; intentando usar un tipo de retorno incompatible

RVAdapter.java

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.LessonCardViewHolder> {

    private String[] mDataset;

    public RVAdapter(String[] dataset) {
        mDataset = dataset;
    }

    @Override
    public LessonCardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new LessonCardViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.lessons_item_card, parent, false));
    }

    @Override
    public void onBindViewHolder(LessonCardViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

LessonCardViewHolcer.java

public class LessonCardViewHolder extends RecyclerView.ViewHolder implements LessonCardView {

    private final TextView lessonCardText;

    public LessonCardViewHolder(View itemView) {
        super(itemView);
        lessonCardText = (TextView) itemView.findViewById(R.id.lesson_card_view);
    }

    @Override
    public void setLessonCardText(String text) {
        lessonCardText.setText(text);
    }
}

Creé la subclase ViewHolder que heredó de LessonCardView en RVAdapter. Errores desaparecidos Pero no estoy seguro si esto es lo correcto. Si funciona para otra persona, entonces estoy haciendo algo mal.

0
Sergey Kovalev 1 mar. 2018 a las 18:19

4 respuestas

La mejor respuesta

Cambie su declaración de adaptador de esto

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.LessonCardViewHolder> {

A este

// import here your view holder

public class RVAdapter extends RecyclerView.Adapter<LessonCardViewHolder> {
0
Bakhtiyor Begmatov 1 mar. 2018 a las 15:22

Parece por cómo está proporcionando los fragmentos que estas clases están en diferentes archivos, o que no están correctamente anidadas en el mismo archivo.

¿Has intentado usar RecyclerView.Adapter<LessonCardViewHolder> en lugar de RecyclerView.Adapter<RVAdapter.LessonCardViewHolder>?

0
Submersed 1 mar. 2018 a las 15:22

Aquí está la solución completa: ejemplo de clase de adaptador Recyclerview

public class IAdapter extends RecyclerView.Adapter<IAdapter.ViewHolder> {


Context context;
ArrayList<Model> modelList;


public ImagesAdapter(Context context,ArrayList<Model> modelList) {
    this.context=context;
    this.modelList=modelList;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_items, parent, false);
        return new ViewHolderImages(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
        Model model=photo.get(position);
        userViewHolder.textView.setText(model.getTitle());

}

public class ViewHolder extends RecyclerView.ViewHolder{

    TextView textView;
    public ViewHolderImages(View itemView) {
        super(itemView);
        textView=(TextView)itemView.findViewById(R.id.textView);
    }
}

@Override
public int getItemCount() {
    return modelList.size();
}

}
0
akshay 1 mar. 2018 a las 15:38

LessonCardViewHolder debería ser una clase anidada en RVAdapter

0
Marina Ž 1 mar. 2018 a las 15:25