2015-04-22 40 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作爲一個庫。

享受