RecyclerView Adapter给出错误“RecycleAdapter类型的层次结构不一致”

时间:2015-04-22 17:29:37

标签: android eclipse android-recyclerview recycler-adapter

我正在尝试将新RecyclerView添加到Fragement内的项目中。我正在关注Link1的视频教程。当我尝试为RecyclerView创建适配器时,我开始收到此错误。我正在使用Eclipse Juno。我无法弄清楚问题所在。请帮忙

我的代码:

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {

private LayoutInflater inflator;
List <Item> data = Collections.EMPTY_LIST;

public RecycleAdapter(Context context, List<Item> data){
    inflator = LayoutInflater.from(context);
}

@Override
public int getItemCount() {
    // TODO Auto-generated method stub
    return data.size();
}


@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {
    View view = inflator.inflate(R.layout.row_staggered_new, parent, false);
    MyViewHolder holder = MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Item current = data.get(position);
    holder.text.setText(current.title);
    holder.image.setImageResource(current.image);

}

public static class MyViewHolder extends RecyclerView.ViewHolder{

    public ImageView image;
    public TextView text;

    public MyViewHolder(View itemView) {
        super(itemView);
        image = (ImageView) itemView.findViewById(R.id.imageView1);
        text = (TextView) itemView.findViewById(R.id.textview1);
    }
}
}

MyViewHolderRecycleAdapter都提供错误"The hierarchy of the type RecycleAdapter is inconsistent"。 在RecycleAdapter的扩展部分中,它显示错误 "Bound mismatch: The type RecycleAdapter.MyViewHolder is not a valid substitute for the bounded parameter <VH extends RecyclerView.ViewHolder> of the type RecyclerView.Adapter<VH>"

任何指针?

4 个答案:

答案 0 :(得分:10)

我发现了问题。问题是我使用的是旧版本和v4支持库,它不包含类android.support.v4.view.ScrollingView类。我用新版本替换了旧的v4库,错误消失了!

答案 1 :(得分:1)

  

我发现了问题。问题是我使用的是旧版本和v4支持库,它不包含类android.support.v4.view.ScrollingView类。我用新版本替换了旧的v4库,错误消失了!

对我来说这是有用的,除了答案:

Eclipse将包含一个名为“appcompat_v7”的项目,我们也应该替换它的库。

答案 2 :(得分:0)

onBindViewHolder方法中,您无法将RecyclerView.ViewHolder类直接转换为MyViewHolder,因为后者是前者的扩展。

你需要明确地执行演员表,即

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    MyViewHolder holder = (MyViewHolder)viewHolder;
    ...
}

修改

您有多个编译问题,但您提到的问题是因为您正在扩展错误的类类型。该类应该像这样扩展

extends RecyclerView.Adapter<RecyclerView.ViewHolder>

答案 3 :(得分:0)

还有一个解决方案是......

  1. 从库中删除jar文件。
  2. 从{sdk→extra→android→support-v7→appcompat
  3. 复制android-support-v7-appcompat到工作区
  4. 你会在appcompat中找到v4库
  5. 右键单击appcompat,然后将其标记为库(如果不是
  6. 现在右键单击您的项目转到java build path添加appcompat作为库。
  7. 享受