6

Я пытаюсь использовать несколько ViewHolders в RecyclerView для того, чтобы поменять эти взгляды на время выполнения. Я создал два класса, которые проходят RecyclerView.ViewHolder:RecyclerView onCreateViewHolder Возвращаемый тип Несовместимость с несколькими пользовательскими ViewHolders

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

Когда я пытаюсь запустить код, я получаю эту ошибку:

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

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

+0

Что такое определение класса 'RecyclerViewAdapter'? – ianhanniballake

ответ

11

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

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

Оно должно быть:

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

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

+1

Я думаю, все, что я должен был сделать, это искать! Это ответ, который мне нужен, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^