【问题标题】:How to pass ArrayList size from onBindViewHolder to getItemCount() method in RecyclerView?如何将 ArrayList 大小从 onBindViewHolder 传递给 RecyclerView 中的 getItemCount() 方法?
【发布时间】:2022-07-07 00:51:13
【问题描述】:

我在 onBindViewHolder 方法中有这个数组。

checklistHelper =  dbHelper.getChecklists(id);
                String status = checklistHelper.getStatus();
                String[] statusSplit = status.split("\n");
                ArrayList<String> newStatusList = new ArrayList<>(Arrays.asList(statusSplit));
                newStatusList.remove(position);
                notifyItemRemoved(position);
                int size =  newStatusList.size();

我想将大小传递给下面的方法

@Override
    public int getItemCount() {

        return size;

这样做 getItemCount 不会得到任何值,这意味着我看不到任何项目。如果我想将该代码放入 Adapter 构造函数中,则会显示项目,但在删除一行后,该行将再次重新创建。因为我放不下

newStatusList.remove(position);
notifyItemRemoved(position);

在适配器构造函数内,因为我无法访问适配器构造函数内的 ViewHolder 位置。

感谢任何帮助。

【问题讨论】:

  • 你知道getItemCount() 是用来支持适配器的数据计数的吧?该数组是否为您的适配器提供数据?如果是这样,为什么不在适配器中将其声明为全局字段?
  • @Kozmotronik 我做到了,谢谢。

标签: java android


【解决方案1】:

您可以声明 int "size=0;"全局内部适配器。 另外,在调用构造函数时创建此数组列表。 这样您就可以在调用 getItemCount() 之前准备好列表。

Adaper(){
ArrayList<Integer> integers = new ArrayList<>();
        integers.add(2);
        integers.add(8);
        integers.add(2);
        integers.add(61);
        integers.add(3);
        integers.add(75);
        size = integers.size();
}

【讨论】:

  • 欣赏它..
  • 我这样做了,但是我在 onBindViewHolder ArrayList newStatusList = new ArrayList(Arrays.asList(statusSplit)); 中有一个类似的数组
  • onBindViewHolder 用于显示数组中的所有位置。这就是为什么它有位置参数。该列表将针对每个职位重复。在调用 onBindViewHolder 之前,您应该有适配器项的大小,因此您可以告诉适配器根据项的大小重复 onBindViewHolder。
  • 您能否发布完整的适配器,以便我可以给您一些帮助。
  • 看,我添加了相关代码。很抱歉接受然后不接受答案,因为问题仍未解决。如果我修复了,我会接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2016-11-01
  • 1970-01-01
  • 2012-04-09
  • 1970-01-01
  • 2013-07-15
相关资源
最近更新 更多