Почему адаптер “не видит” второй viewholder?

251
15 декабря 2017, 02:46

Пытаюсь сделать загрузку разных макетов для пунктов списка. Изучаю, так сказать, пошагово. Смог сделать загрузку разных 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());
}
}
Answer 1

Вы указали, что ваш адаптер должен работать только с классом MyListCursorAdapter.ViewHolder. Засим компилятор и отказывается разрешить вам другой использовать.

Расширьте перечень классов, с коими может работать адаптер, указав базовый ViewHolder - RecyclerView.ViewHolder - в объявлении класса, возвращаемом значении метода onCreateViewHolder и в аргументе метода onBindViewHolder

READ ALSO
Как создать простую html форму используя Play Framework

Как создать простую html форму используя Play Framework

Я только начал знакомиться с этим фраемворком, и не понимаю как создать html форму есть класс контроллер:

236
Как правильно обработать SQLException: Duplicate entry

Как правильно обработать SQLException: Duplicate entry

База MySQL, работа через jdbcПри добавлении записи в базу, если в таблице в данном поле уже есть такая же запись, выбрасывает SQLException: Duplicate entry

241
Как достать html код страницы из webView Android?

Как достать html код страницы из webView Android?

Добрый деньНужно вытащить из WebView Android ссылку на одно изображение

255
Hibernate criteria добавить в результат сумму по полю

Hibernate criteria добавить в результат сумму по полю

Пытаюсь написать критерию для запроса, который кроме обычного листа клиентов вернёт ещё один столбез с суммой всех заказов (поле total в классе...

192