Получение позиции в onCreateViewHolder
Я преобразовываю свой ListView в RecyclerView с помощью библиотеки поддержки v7.
У меня есть 2 разных макета для загрузки в RecyclerView
. В ListView
я получил позицию элемента в методе getView()
и смог загрузить соответствующий макет для этой строки. Но в RecyclerView
параметр onCreateViewHolder
не имеет параметра положения.
Есть ли другой способ достичь этого?
PS: приложение "Входящие" от Google показывает разные макеты в RecyclerView
(возможно,). Я не думаю, что они могли использовать ListView
из-за улучшения производительности в RecyclerView
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v=null;
MyVO vo = voList.get(???POSITION???);
switch(vo.getType()){
case TYPE_1:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout1, viewGroup, false);
break;
case TYPE_2:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout2, viewGroup, false);
break;
}
return new ViewHolder(v);
}
Ответы
Ответ 1
Во-первых, переопределите метод getItemViewType
:
@Override
public int getItemViewType(int position) {
//Implement your logic here
MyVO vo = voList.get(position);
return vo.getType();
}
Затем вы можете просто использовать второй параметр onCreateViewHolder
:
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View v=null;
switch(viewType){
case TYPE_1:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout1, viewGroup, false);
break;
case TYPE_2:
v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.layout2, viewGroup, false);
break;
}
return new ViewHolder(v);
}