Пытаюсь сделать загрузку разных макетов для пунктов списка. Изучаю, так сказать, пошагово. Смог сделать загрузку разных layout в пределах одного viewholder, но это не работает, если в разметке отсутствует view с заданным id. Для этого нужно подгружать, в зависимости от условия, разные viewholder. Пытаюсь реализовать с помощью данного ответа, но выдает такое ругательство:
Суть ошибки, в общем то, ясна, но вот как исправлять - абсолютно непонятно. Делаю, вроде, все по примеру.
Вот код адаптера, onBindViewHolder еще не дописал, потому что застрял на этой ошибке. Если же использовать один холдер, то layout'ы прекрасно меняются по условию.
public class MyListCursorAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder>
{
public MyListCursorAdapter(Context context,Cursor cursor)
{
super(context,cursor);
}
public static class ViewHolder extends RecyclerView.ViewHolder
{
public TextView mTextView;
public ViewHolder(View view) {
super(view);
mTextView = (TextView) view.findViewById(R.id.name);
}
}
public static class ViewHolder1 extends RecyclerView.ViewHolder
{
public TextView mTextView1;
public ViewHolder1(View view) {
super(view);
mTextView1 = (TextView) view.findViewById(R.id.name1);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
{
ViewHolder vh;
View itemView;
switch (viewType)
{
case 0 :
itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
vh = new ViewHolder(itemView);
break;
case 1 :
itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_2, parent, false);
vh = new ViewHolder1(itemView);
break;
default:
itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_3, parent, false);
vh = new ViewHolder(itemView);
break;
}
return vh;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor)
{
MyListItem myListItem = MyListItem.fromCursor(cursor);
viewHolder.mTextView.setText(myListItem.getName());
}
}
Вы указали, что ваш адаптер должен работать только с классом MyListCursorAdapter.ViewHolder. Засим компилятор и отказывается разрешить вам другой использовать.
Расширьте перечень классов, с коими может работать адаптер, указав базовый ViewHolder - RecyclerView.ViewHolder - в объявлении класса, возвращаемом значении метода onCreateViewHolder и в аргументе метода onBindViewHolder
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости