gpt4 book ai didi

android - RecyclerView onCreateViewHolder 返回类型与多个自定义 ViewHolder 不兼容

转载 作者:IT老高 更新时间:2023-10-28 23:10:40 25 4
gpt4 key购买 nike

我正在尝试在 RecyclerView 中使用多个 ViewHolder,以便在运行时交换这些 View 。我创建了两个扩展 RecyclerView.ViewHolder 的类:

MenuItemViewHolder

public class MenuItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public TextView menuItemText;
public ImageView menuItemPhoto;
public RecyclerViewAdapter rva;

public MenuItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);

rva = caller;
menuItemText = (TextView) itemView.findViewById(R.id.grid_text);
menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image);
}

@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();

}

}

SelectedItemViewHolder

public class SelectedItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

public TextView menuItemText;
public ImageView menuItemPhoto;
public RecyclerViewAdapter rva;

public SelectedItemViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);

menuItemText = (TextView) itemView.findViewById(R.id.grid_text_full);
menuItemPhoto = (ImageView) itemView.findViewById(R.id.grid_image_full);
}

@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}

它们在我的 RecyclerViewAdapter 类的 onCreateViewHolder 函数中被调用:

RecyclerViewAdapter onCreateViewHolder

// Create new views (invoked by the layout manager)

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

switch (viewType) {

case 0:
View gridItemLayout = LayoutInflater.from(parent.getContext())
.inflate(R.layout.grid_single, parent, false);
// set the view's size, margins, paddings and layout parameters
MenuItemViewHolder vh = new MenuItemViewHolder(gridItemLayout);

case 2:
View selectedItemLayout = LayoutInflater.from(parent.getContext())
.inflate(R.layout.grid_single_full, parent, false);
// set the view's size, margins, paddings and layout parameters
SelectedItemViewHolder sivh = new SelectedItemViewHolder(selectedItemLayout);
return sivh;
}
}

当我尝试运行代码时,我收到此错误:

Error:(48, 36) error: onCreateViewHolder(ViewGroup,int) in RecyclerViewAdapter cannot override onCreateViewHolder(ViewGroup,int) in Adapter return type ViewHolder is not compatible with MenuItemViewHolder where VH is a type-variable: VH extends ViewHolder declared in class Adapter

所以,问题似乎是 onCreateViewHolder 不接受我的自定义类是从 RecyclerView.ViewHolder 继承的。我正在使用 Android Studio,所以问题可能就在那里。我很困惑,因为我认为 Java 继承可以毫无问题地处理这个问题。有人可以提出解决方案吗?

编辑:当我将 onCreateViewHolder 的返回类型更改为只有一个 VH 的 MenuItemViewHolder 时,一切正常。但是,当我有多个可以随时交换的 VH 类时,这不起作用。

最佳答案

RecyclerView.Adapter 是一个参数化类,它采用单个 ViewHolder 类型。您的定义可能如下所示:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MenuItemViewHolder>

应该是:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>

不要忘记对 onBindViewHolder 也有正确的定义。您还需要覆盖 getItemViewType

关于android - RecyclerView onCreateViewHolder 返回类型与多个自定义 ViewHolder 不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com