J'essaie d'utiliser plusieurs ViewHolders dans un RecyclerView afin d'échanger ces vues lors de l'exécution. J'ai créé deux classes qui se prolongent RecyclerView.ViewHolder:RecyclerView onCreateViewHolder Type de renvoi Incompatibilité avec plusieurs ViewHolders personnalisés
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();
}
}
Ils sont appelés au sein de ma fonction de la classe RecyclerViewAdapter onCreateViewHolder:
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;
}
}
Lorsque je tente d'exécuter le code, je reçois cette erreur:
Ainsi, la question semble être que onCreateViewHolder n'accepte pas mes classes personnalisées comme étant héritées de RecyclerView.ViewHolder. J'utilise Android Studio, alors peut-être que le problème est là. Je suis perplexe, car je pensais que l'héritage Java gérerait cela sans problème. Quelqu'un pourrait-il proposer une solution?
Éditer: Lorsque je change le type de retour de onCreateViewHolder en MenuItemViewHolder avec un seul VH, tout fonctionne bien. Cependant, cela ne fonctionne pas quand j'ai plusieurs classes VH qui peuvent être permutées à tout moment.
Quelle est la définition de classe de 'RecyclerViewAdapter'? – ianhanniballake