RecyclerView 适配器看不到 ViewHolder
RecyclerView Adapter don't see ViewHolder
我正在尝试根据 MVP 标准开发一个项目。在我遵循的指南中,作者创建了单独的 ViewHolder class。我也尝试这样做,但 Adapter 拒绝使用单独的 ViewHolder。
有 2 个错误
Cannot resolve symbol 'LessonCardView'
'onCreateViewHolder(ViewGroup, int)' in RVAdapter clashes with 'onCreateViewHolder(ViewGroup, int)' in 'android.support.v7.widget.RecyclerView.Adapter'; attempting to use incompatible return type
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);
}
}
我在 RVAdapter 中创建了继承自 LessonCardView 的子class 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
中的嵌套 class
这是完整的解决方案 - Recyclerview Adapter class 示例
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();
}
}
我正在尝试根据 MVP 标准开发一个项目。在我遵循的指南中,作者创建了单独的 ViewHolder class。我也尝试这样做,但 Adapter 拒绝使用单独的 ViewHolder。
有 2 个错误
Cannot resolve symbol 'LessonCardView'
'onCreateViewHolder(ViewGroup, int)' in RVAdapter clashes with 'onCreateViewHolder(ViewGroup, int)' in 'android.support.v7.widget.RecyclerView.Adapter'; attempting to use incompatible return type
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);
}
}
我在 RVAdapter 中创建了继承自 LessonCardView 的子class 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
中的嵌套 class这是完整的解决方案 - Recyclerview Adapter class 示例
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();
}
}