RecyclerView onCreateViewHolder Тип возвращаемого типа несовместимости с несколькими пользовательскими часами ViewHolders

Я пытаюсь использовать несколько ViewHolders в RecyclerView, чтобы поменять эти представления во время выполнения. Я создал два класса, которые расширяют RecyclerView.ViewHolder:

MenuItemViewHolder

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(); } 

}

SelectedItemViewHolder

 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(); } 

}

Они вызываются в моей функции onCreateViewHolder класса RecyclerViewAdapter:

RecyclerViewAdapter onCreateViewHolder

 // 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): onCreateViewHolder (ViewGroup, int) в RecyclerViewAdapter не может переопределить onCreateViewHolder (ViewGroup, int) в режиме возврата адаптера. ViewHolder несовместим с MenuItemViewHolder, где VH является переменной типа: VH расширяет ViewHolder, объявленный в классе Adapter

Таким образом, проблема заключается в том, что onCreateViewHolder не принимает мои пользовательские классы как унаследованные от RecyclerView.ViewHolder. Я использую Android Studio, поэтому, возможно, проблема там. Я недоумеваю, так как я думал, что наследование Java справится с этим без проблем. Может ли кто-нибудь предложить решение?

Изменить: Когда я изменяю тип возвращаемого значения onCreateViewHolder на MenuItemViewHolder только с одним VH, все работает нормально. Однако это не работает, когда у меня есть несколько классов VH, которые можно поменять местами в любое время.

RecyclerView.Adapter – это параметризованный класс, который использует один тип ViewHolder . Ваше определение, вероятно, выглядит так:

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MenuItemViewHolder> 

Должен быть:

 public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> 

Не забудьте также иметь правильное определение для onBindViewHolder . Вам также нужно переопределить getItemViewType .

Intereting Posts