在onCreateViewHolder中获得位置

Sat*_*esh 16 android listview android-5.0-lollipop android-recyclerview

我正在使用Support Library v7将ListView转换为RecyclerView.

我有2个不同的布局加载到RecyclerView.在ListView,我获得了getView()方法中项目的位置,并能够为该行加载适当的布局.但RecyclerViewonCreateViewHolder没有位置参数.

有没有其他方法来实现这一目标?

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);
    }
Run Code Online (Sandbox Code Playgroud)

rom*_*4ek 40

首先,覆盖getItemViewType方法:

@Override
public int getItemViewType(int position) {
    //Implement your logic here
    MyVO vo = voList.get(position);
    return vo.getType();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地使用第二个参数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);
}
Run Code Online (Sandbox Code Playgroud)