Android 支持多个pojo类的回收器视图

Android 支持多个pojo类的回收器视图,android,android-recyclerview,pojo,Android,Android Recyclerview,Pojo,我有一个要求,即我有一个由多个模型类支持的单个回收器视图。 “我的回收器”视图将放大多个不同的布局。因此,为了扩大布局,我定义了onCreateViewholder,如下所示: @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder viewHolder = null;

我有一个要求,即我有一个由多个模型类支持的单个回收器视图。 “我的回收器”视图将放大多个不同的布局。因此,为了扩大布局,我定义了onCreateViewholder,如下所示:

     @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的单独计数器。使用该索引获取项目,而不是位置。