在onCreateViewHolder中获取位置
我正在使用Support Library v7将我的ListView转换为RecyclerView。在onCreateViewHolder中获取位置
我有2个不同的布局加载在RecyclerView
。在ListView
中,我获得了getView()
方法中该项目的位置,并且能够为该行加载适当的布局。但在RecyclerView
中,onCreateViewHolder
没有位置参数。
有没有其他办法可以达到这个目的?
PS:Google的收件箱应用程序在RecyclerView
(可能)中显示不同的布局。我不认为他们会在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);
}
首先使用了ListView
由于性能的提升,覆盖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);
}
是的。有用。但问题是,在调用notifyDataSetChanged()之后,layout1元素将变为null,并且onBindViewHolder()中只有layout2元素可用() – Sathesh 2014-11-03 09:26:17
当许多数据项属于同一个数时,这绝对有效但不是一个好的解决方案视图类型(例如,在需要在列表中添加页眉和页脚的情况下)我不想为列表中的每个项目创建案例,因为它们都属于相同的视图类型。 – user1841702 2016-07-14 10:01:59
你的第二个参数是'viewType',我认为这是你想要的。 – rom4ek 2014-11-03 05:53:39
这就是我最初也想到的。但不是。它只是视图的类型而不是位置。 – Sathesh 2014-11-03 05:55:27
另一种思考方式:switch(viewType)而不是vo.getType() – 2014-11-03 05:59:31