Android.widget.textview не может применяться к android.view.view

Я пытаюсь следовать официальному документу Android для создания списков и карточек .

В третьем (сверху) примере кода на странице есть пример того, как реализовать MyAdapter который обеспечивает доступ к элементам в наборе данных, создает представления для элементов и заменяет их, когда их больше не видно.

Проблема в том, что на onCreateViewHolder они передают v который представляет собой View для ViewHolder который реализован непосредственно перед этим. Конструктор ViewHolder ожидает TextView . Android Studio 1.0, чем крики:

 android.widget.textview cannot be applied to android.view.view 

Что не так?

Это новый шаблон RecyclerView . В нем вы используете 3 компонента:

Объект ViewHolder который расширяет RecyclerView.ViewHolder. В нем вы определяете поля View и конструктор, который принимает параметр View v as. В этом конструкторе используйте v.findViewById (), чтобы связать все эти представления

onCreateViewHolder() делает две вещи: сначала вы надуваете объект View из макета. Затем вы создаете ViewHolder (тот, который вы определили выше) с этим завышенным представлением, переданным как параметр.

Наконец, onBindViewHolder() передается объект ViewHolder, в который вы помещаете содержимое во все поля, определенные в первом и связанный на третьем шаге.

Что касается упомянутого вами примера, то есть ошибка. Метод onCreateViewHolder() должен выглядеть следующим образом:

 // Create new views (invoked by the layout manager) @Override public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_text_view, parent, false); // set the view's size, margins, paddings and layout parameters ... ViewHolder vh = new ViewHolder((TextView)v); //You need a cast here return vh; } 

ИЛИ ViewHolder должен определить конструктор, ожидающий объект View (это на самом деле более корректно):

 public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public TextView mTextView; public ViewHolder(View v) { mTextView = (TextView) v.findViewById(/* some ID */); } }