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();
}
}
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();
}
}
// 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;
}
}
当我尝试运行代码时,我得到以下错误:
错误:(48,36)错误:RecyclerViewAdapter中的OnCreateViewWholder(ViewGroup,int)无法重写适配器中的OnCreateViewWholder(ViewGroup,int)返回类型ViewWholder与MenuItemViewWholder不兼容,其中VH是类型变量:VH扩展类Adapter中声明的ViewWholder
所以,问题似乎是OnCreateViewWholder不接受我的自定义类是从RecyclerView.ViewWholder继承的。我使用的是Android Studio,所以也许问题就在那里。我很困惑,因为我以为Java继承可以处理这件事,不会有任何问题。有人能提出一个解决办法吗?
编辑:当我将OnCreateViewWholder的返回类型更改为MenuItemViewWholder仅使用一个VH时,一切工作都很好。但是,当我有多个可以随时交换的VH类时,这就不起作用了。
RecyclerView.Adapter
是一个参数化类,它接受单个ViewWholder
类型。您的定义可能如下所示:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MenuItemViewHolder>
应该是:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
别忘了为OnBindViewWholder
提供正确的定义。您还需要重写GetItemViewType
。
我试图通过对象属性NodeID排序一个对象,这是一个长类型。 有什么方法可以通过对象属性NodeID对PeerNode的ArrayList进行排序吗??
问题内容: 我正在学习Java。我试图运行代码,但出现此错误:。它向我显示错误的代码部分。 为什么会这样呢? 问题答案: 这是因为在类中不能有两个具有相同名称但返回类型不同的方法。 子类不能使用与返回类型不同的超类中已经存在的方法相同的名称声明方法。 但是,子类可以声明具有与超类相同的签名的方法。我们称此为“覆盖”。 你需要这个 要么 一个好的做法是通过注释标记覆盖的方法:
我应该如何更改getPhoneNumber内部的代码才能正确工作,有什么想法吗?这是我最后应该得到的+38(050)123-45-67。38是国家代码,这是电话号码501234567,但你必须在数字开头放零才能得到10个类似于这里的数字(>0<50) 完整的代码。
当我执行一个web客户端请求(到一个外部api)并且响应是4xx或5xx代码时,我遇到了一个问题。建议处理该响应并使用自定义类检索响应 Web客户端配置是 处理过滤器.class MyExpcetion.class 但是我的客户回复总是给我一个默认格式 代替 怎么了?谢谢
问题内容: 当我尝试编译时,它给了我错误 我应该如何解决这个问题? 问题答案: 该错误是由于以下事实导致的:调用将是不明确的- 应该调用两种方法中的哪一种?从JLS§8.4.2开始: 在类中声明两个具有重写等效签名的方法是编译时错误。 方法的返回类型不是其签名的一部分,因此根据上述说明,您将收到错误。 假设您不能简单地重命名冲突的方法,在这种情况下就不能使用继承,并且需要使用诸如compositi