【发布时间】:2014-11-03 05:49:46
【问题描述】:
我正在使用支持库 v7 将我的 ListView 转换为 RecyclerView。
我有 2 种不同的布局要加载到 RecyclerView 中。在ListView 中,我在getView() 方法中获取了项目的位置,并且能够为该行加载适当的布局。但在RecyclerViewonCreateViewHolder 中没有位置参数。
还有其他方法可以实现吗?
PS:来自 Google 的 Inbox 应用在 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);
}
【问题讨论】:
-
你的第二个参数是
viewType,我想这就是你想要的。 -
我一开始也是这么想的。但它不是。它只是视图的类型,而不是位置。
-
另一种思路:switch(viewType) 而不是 vo.getType()
-
@Mohamed 我猜 MyVO 将是一个数据模型,它不仅包含一个值,而且还包含一种用于显示该值的小部件/布局。通常,您的数据集是原始值的集合,Sathesh'es 是 MyVO 的集合。我不确定每个单元格有一个模型是个好主意,我喜欢每行有一个模型的想法。
标签: android listview android-5.0-lollipop android-recyclerview