2015-04-22 42 views
4

我试图在我的项目中添加新的RecyclerViewFragement。我正在关注Link1的视频教程。当我尝试为RecyclerView创建适配器时,我开始出现此错误。我正在使用Eclipse Juno。我不知道这个问题。请帮助RecyclerView适配器给出错误“RecycleAdapter类型的层次结构不一致”

我的代码:

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>"

任何指针?

+0

在'onCreateViewHolder'方法,不应该第二行是'MyViewHolder =新MyViewHolder(视图)'?我想你错过了'新' – NValchev

回答

10

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

+0

我的SDK管理器显示我正在使用最新的支持库,但仍然出现错误。 – Solace

+0

保存我的一天非常感谢! – Muhammad

+0

TIL - 最简单的方法来添加支持库(删除后)是通过(右键单击项目) - > Android工具 - >添加支持库... 5多年的Android开发,我永远不知道存在... –

0

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

你需要明确执行转换,即

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

编辑

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

extends RecyclerView.Adapter<RecyclerView.ViewHolder> 
+0

这似乎并没有工作。我仍然得到同样的错误..任何其他想法? –

+0

你发布的代码甚至不应该编译!它真的是你使用的代码吗?我看到代码中的编译错误! –

+0

是的。我正在使用这段代码,编译错误与我在问题中提到的一样。在onCreateViewHolder我已经将这一行更改为MyViewHolder holder = new MyViewHolder(view);添加缺少的关键字'新' –

1

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

这对我很有用,其他答案:

Eclipse将包括一个名为“appcompat_v7”项目,我们应该取代它的库了。

0

多了一个解决方案..从资料库中

  1. 删除jar文件。
  2. 在复制android-support-v7-appcompat到工作区从SDK→额外→机器人→支持-V7→程序兼容性
  3. 你会发现在程序兼容性
  4. V4库右键单击程序兼容性,然后将其标记为库,如果它不是
  5. 现在右键单击你的项目去java构建路径添加appcompat作为一个库。

享受