Android 添加页脚视图后,仅在回收器视图中显示一项

Android 添加页脚视图后,仅在回收器视图中显示一项,android,android-recyclerview,Android,Android Recyclerview,我使用recycerview显示我的数据。在recyclerview中,我使用两个视图保持器,一个用于获取回收项目,另一个用于在recyclerview中显示页脚布局。arraylist中仅显示一项…我已尝试在getItemViewType()中更改条件 通过这些,我得到了一些案例, 1.在arraylist和footer视图中显示一项 2.显示arraylist中的所有项目,但不显示页脚视图 private static final int TYPE_FOOTER=1; privat

我使用recycerview显示我的数据。在recyclerview中,我使用两个视图保持器,一个用于获取回收项目,另一个用于在recyclerview中显示页脚布局。arraylist中仅显示一项…我已尝试在getItemViewType()中更改条件 通过这些,我得到了一些案例, 1.在arraylist和footer视图中显示一项 2.显示arraylist中的所有项目,但不显示页脚视图

 private static final int TYPE_FOOTER=1;
    private static final int TYPE_ITEM=2;
这是我的oncreateViewHolder

 public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if(viewType==TYPE_ITEM) {
            LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
            View view = layoutInflater.inflate(R.layout.details_recycler_view_item, parent, false);
            return new ItemViewHolder(view);
        }
        else if(viewType==TYPE_FOOTER) {
       LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View listItem = layoutInflater.inflate(R.layout.recycler_footer_view, parent, false);
        FooterViewHolder viewHolder = new FooterViewHolder(listItem);
        return viewHolder;
        }
        else return null;
    }

这是我的onbindviewholder, 在objectArrayList中,我有2个对象。但它只显示第一个对象中存在的数据

  public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
                if(holder instanceof ItemViewHolder) {
                    ItemViewHolder viewHolder = (ItemViewHolder) holder;
                    AndroidLogger.log(5,TAG,"position"+position);
                    DetailsObject data = objectArrayList.get(position);
                    viewHolder.nameTextView.setText(data.name());
                    viewHolder.validTextView.setText(data.getValue());
                    viewHolder.activeButton.setText("Active");
                    viewHolder.image.setImageBitmap(photo);

                }
                else if(holder instanceof FooterViewHolder) {
                    FooterViewHolder footerViewHolder=(FooterViewHolder) holder;
                    DetailsObject data = objectArrayList.get(position);
              if (data != null) {
                   footerViewHolder.rateTextView.setText(data.getRate() );
                   footerViewHolder.rentTextView.setText(data.getRent() );
                   footerViewHolder.billTextView.setText(data.getBill() );


               }
                }
           }

请任何人调查我的问题并帮助我解决这个问题。我真的无法找到问题。我很久以前一直在试图找到解决方案,但现在无法找到解决方案。

在将此objectArrayList传递给适配器之前,必须将页脚对象添加到objectArrayList,然后

@Override
public int getItemCount() {
    return objectArrayList.size();
}

@Override
public int getItemViewType(int position) {
    return position == objectArrayList.size() - 1 ? TYPE_FOOTER : TYPE_ITEM;
}

在适配器中,不应在没有else语句的情况下离开if语句

public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    DetailsObject data = objectArrayList.get(position);

    if (getItemViewType(position) == TYPE_ITEM) {
        ItemViewHolder viewHolder = (ItemViewHolder) holder;
        AndroidLogger.log(5, TAG, "position: " + position);
        viewHolder.nameTextView.setText(data.name());
        viewHolder.validTextView.setText(data.getValue());
        viewHolder.activeButton.setText("Active");
        viewHolder.image.setImageBitmap(photo);
    } else {
        FooterViewHolder footerViewHolder=(FooterViewHolder) holder;
        if (data != null) {
            footerViewHolder.rateTextView.setVisibility(true); 
            footerViewHolder.rateTextView.setText(data.getRate());
            footerViewHolder.rentTextView.setVisibility(true);
            footerViewHolder.rentTextView.setText(data.getRent());
            footerViewHolder.billTextView.setVisibility(true);
            footerViewHolder.billTextView.setText(data.getBill());
        } else {
            AndroidLogger.log(5, TAG, "this is null in position: " + position);
            footerViewHolder.rateTextView.setVisibility(false); 
            footerViewHolder.rentTextView.setVisibility(false);
            footerViewHolder.billTextView.setVisibility(false);
        }
    }
}

在提出问题之前,我建议您先看看异常的含义。您分配的itemCount多于数组长度。是的,我理解,但在添加页脚视图时出现此异常@Muhammed Yalçn Kurumake确保
详细信息\回收商\查看\项目
设置为包装内容,而不匹配parentyes。。“详细信息”\u recycler\u项目已设置为“包装内容”…但也仅显示一个项目@Daniel您可以显示适配器的构造函数,无论您在何处添加或传递页脚项目我已经尝试了您所说的内容,现在我得到了布局,但在recyclerview itemviewholder中,只显示了来自的第一个对象objectArrayList@ShahriyarAghajaniI还有一个问题,我真的找不到解决方案。我已经编辑了我的问题。所以请仔细研究,帮助我@Shahriyar AghajaniI,而不是破坏你的列表,将页脚项目分开,只需将回收器大小设置为列表大小+1,并从getItemViewType和bind中的位置检查中删除-1即可。@AjahnCharles现在它显示正确。真的非常感谢你,因为你我感觉好多了。再次感谢:-)测试一下这个,@Kousalya
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    DetailsObject data = objectArrayList.get(position);

    if (getItemViewType(position) == TYPE_ITEM) {
        ItemViewHolder viewHolder = (ItemViewHolder) holder;
        AndroidLogger.log(5, TAG, "position: " + position);
        viewHolder.nameTextView.setText(data.name());
        viewHolder.validTextView.setText(data.getValue());
        viewHolder.activeButton.setText("Active");
        viewHolder.image.setImageBitmap(photo);
    } else {
        FooterViewHolder footerViewHolder=(FooterViewHolder) holder;
        if (data != null) {
            footerViewHolder.rateTextView.setVisibility(true); 
            footerViewHolder.rateTextView.setText(data.getRate());
            footerViewHolder.rentTextView.setVisibility(true);
            footerViewHolder.rentTextView.setText(data.getRent());
            footerViewHolder.billTextView.setVisibility(true);
            footerViewHolder.billTextView.setText(data.getBill());
        } else {
            AndroidLogger.log(5, TAG, "this is null in position: " + position);
            footerViewHolder.rateTextView.setVisibility(false); 
            footerViewHolder.rentTextView.setVisibility(false);
            footerViewHolder.billTextView.setVisibility(false);
        }
    }
}