Android 支持多个pojo类的回收器视图
我有一个要求,即我有一个由多个模型类支持的单个回收器视图。 “我的回收器”视图将放大多个不同的布局。因此,为了扩大布局,我定义了onCreateViewholder,如下所示:Android 支持多个pojo类的回收器视图,android,android-recyclerview,pojo,Android,Android Recyclerview,Pojo,我有一个要求,即我有一个由多个模型类支持的单个回收器视图。 “我的回收器”视图将放大多个不同的布局。因此,为了扩大布局,我定义了onCreateViewholder,如下所示: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder viewHolder = null;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case 1:
View v1 = inflater.inflate(R.layout.searchresultsrow1, parent, false);
viewHolder = new AppViewHolder(v1);
break;
case 2:
View v2 = inflater.inflate(R.layout.searchresultsrow2, parent, false);
viewHolder = new AppViewHolder(v2);
break;
return viewHolder
}
在bindview方法中,我使用的实例确定持有者类型:`
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof AppViewHolder){
AppViewHolder vh1 = (AppViewHolder) holder;
vh1.appName.setText(Html.fromHtml(**appList**.get(position).getmAppName());
}
} else if (holder instanceof ContactViewHolder){
ContactViewHolder vh3 = (ContactViewHolder) holder; vh3.contactName.setText(Html.fromHtml(**contactList**.get(position).getContactName()));}
}`
现在我不知道在itemCount上发送什么:
@Override
public int getItemCount() {
return ??;
}
因为myapplist对象类型不同,contact列表对象类型不同我在getItemCount中尝试过使用开关大小写,但是它只返回单个列表的计数,并且只显示特定列表的结果,而我希望将这两个列表的结果结合起来。
如果我发送两个列表的加法,那么我将遇到arrayindexoutofbounds异常。
在这种情况下可以使用什么方法?您可以这样做
@Override
public int getItemCount() {
if(appList != null && contactList != null)
return appList.size() + contactList.size();
else
{
if(appList != null)
return appList.size();
else if (contactList != null)
return contactList.size();
else
return 0;
}
}
注意:您必须跟踪每个列表中呈现的项目数量,并使用该索引从相应列表中获取项目,否则您将获得ArrayIndexOutofBoundsException
。不要使用当前位置从列表中获取项目
更新
保留两个变量
private int appListIndex = 0;
Private int contactListIndex = 0;
在班级层面
那就这样做吧
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof AppViewHolder){
AppViewHolder vh1 = (AppViewHolder) holder;
vh1.appName.setText(Html.fromHtml(appList.get(appListIndex++).getmAppName());
}
} else if (holder instanceof ContactViewHolder){
ContactViewHolder vh3 = (ContactViewHolder) holder;
vh3.contactName.setText(Html.fromHtml(contactList.get(contactListIndex++).getContactName()));
}
}
我想要两个列表的组合结果:
由于您希望两个列表都生成recyclerView,请创建一个object类型的列表,并将这两个列表的所有内容添加到此列表中。然后在onBindViewHolder()
中检查列表。获取类的(位置)实例
然后根据类型执行操作
在getItemCount()
中返回组合列表的大小
希望这有帮助。我已经这样做了,但我的要求是它应该显示组合结果。如果我使用If-else,每次它将只显示单个数组的结果list@Gautam更新了我的答案。在这种情况下,让我们假设两个列表都包含5个元素,然后它将返回10&这将导致onBindView中的arrayindexoutofbounds。因为位置可以变化,并且可以大于5,我在我的任何arraylist中都找不到。您必须为每个列表维护从0到大小-1的单独计数器。使用该索引获取项目,而不是位置。