Подтвердить что ты не робот

Получение позиции в 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);
    }
4b9b3361

Ответ 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);
}