2017-08-30 87 views
-3

我在我的RecyclerViewAdapter我用他們改變取決於我dynamicaly收到的位置來看3 ViewHolder。爲什麼myViewHolder(s)不能被鑄造?

@Override 
    public int getItemViewType(int position) { 

     int viewType = 0; 

     if (position == 0) { 
      viewType = 0; 
     }else if (position == 1){ 
      viewType = 1; 
     }else if (position == 2){ 
      viewType = 2; 
     } 

     return viewType; 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_notification, parent, false); 
     RecyclerView.ViewHolder viewHolder; 
     switch (viewType){ 
      case 0: 
       return new MyViewHolder(v); 
      case 1: 
       return new MyViewHolderAccepted(v); 
      case 2: 
       return new MyViewHolderRefused(v); 
      default: 
       return null; 
     } 

    } 

    @Override 
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { 
     final DataNotifications dataNotifications = list.get(position); 

    int type = Integer.valueOf(dataNotifications.getStatue()); 
    switch (getItemViewType(type)){ 
      case 0: 
       MyViewHolder myViewHolder = (MyViewHolder) holder; 
       ........ 
       break; 
      case 1: 
       MyViewHolderAccepted myViewHolderAccepted = (MyViewHolderAccepted) holder; 
       ....... 
       break; 
      case 2: 
       MyViewHolderRefused myViewHolderRefused = (MyViewHolderRefused) holder; 
       ........ 
       break; 
     } 


//  Glide.with(context).load(dataNotifications.getThumbnail()).into(holder.thumnail); 




    } 

當我運行上面的代碼,我得到這個異常:

NotificationAdapter $ MyViewHolder不能轉換到 NotificationAdapter $ MyViewHolderAccepted

我應該爲每個ViewHolder不同的佈局? - 但我只改變一個TextView的顏色,因此每個ViewHolder的佈局會很昂貴。

我viewHolders

public class MyViewHolder extends RecyclerView.ViewHolder { 
     .... 


     public MyViewHolder(View itemView) { 
      super(itemView); 
      .... 
     } 
    } 
    public class MyViewHolderAccepted extends MyViewHolder{ 
     ... 

     public MyViewHolderAccepted(View itemView) { 
      super(itemView); 
      ... 
    } 

    public class MyViewHolderRefused extends MyViewHolder{ 


     public MyViewHolderRefused(View itemView) { 
      super(itemView); 
      .... 
     } 
    } 
+0

你在數組中傳遞的數組長度是什麼 –

+0

downvoter你能解釋爲什麼嗎? –

+0

@ V-rundPuro打哪個陣列? –

回答

1

NotificationAdapter $ MyViewHolder不能轉換到NotificationAdapter $ MyViewHolderAccepted

最有可能的,因爲它是MyViewHolderAccepted擴展MyViewHolder而不是相反。或者它根本沒有擴展它。

class MyViewHolderAccepted extends MyViewHolder { 
    .... 

編輯

注意延伸不是雙向的。如果類B擴展A,那麼你可以施放BA,但不AB,這是你綁做什麼。

EDIT 2

公共無效onBindViewHolder(最終RecyclerView.ViewHolder持有者

這種情況。你需要更改方法簽名holder類型爲MyViewHolder。然後,它應該是所有罰款。

public void onBindViewHolder(final MyViewHolder holder 
+0

檢查編輯點評,這是我目前的延長。 –

+0

看到編輯答案。 –

+0

sry,我更新了我的問題。 –

相關問題