我正在尝试按照MVP标准开发一个项目。在我遵循的指南中,作者创建了单独的ViewHolder类。我试图做同样的事,但适配器拒绝使用单独的ViewHolder。
有2个错误
无法解析符号'LessonCardView'
RVAdapter中的'onCreateViewHolder(ViewGroup,int)'与'android.support.v7.widget.RecyclerView.Adapter'中的'onCreateViewHolder(ViewGroup,int)'冲突;尝试使用不兼容的返回类型
RV adapter.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;
}
}
lesson card VIE WHO列出而.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);
}
}
我创建了继承自RVAdapter中的LessonCardView的子类ViewHolder。错误消失了。但我不确定这是否正确。如果它适用于其他人,那么我做错了。
从此更改适配器声明
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.LessonCardViewHolder> {
对此
// import here your view holder
public class RVAdapter extends RecyclerView.Adapter<LessonCardViewHolder> {
从您提供片段的方式来看,这些类在不同的文件中,或者没有正确嵌套在同一个文件中。
你尝试过使用RecyclerView.Adapter<LessonCardViewHolder>
而不是RecyclerView.Adapter<RVAdapter.LessonCardViewHolder>
吗?
LessonCardViewHolder应该是RVAdapter中的嵌套类
这是完整的解决方案 - Recyclerview Adapter类示例
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();
}
}