Android 如何为ArrayList充气<;HashMap<;整数,对象>&燃气轮机;回收视图的值

Android 如何为ArrayList充气<;HashMap<;整数,对象>&燃气轮机;回收视图的值,android,arraylist,android-recyclerview,static,hashmap,Android,Arraylist,Android Recyclerview,Static,Hashmap,我的查询是,我的值存储在HashMap中,HashMap存储在ArrayList中。我可以充气,但它只得到充气的最后一个增值 根据用户位置,共有7个项目,不同位置的项目可能有所不同。这七项是(A、B、C、D、E、F、G) 我正在测试它是否打印了所有的七个项目。但它只打印“G”,因为它在HashMap的末尾添加了“G”。但是,所有值都存储在Arraylist中 以下是onBindViewHolder和getItemCount的代码I @Override public void onBindVie

我的查询是,我的值存储在HashMap中,HashMap存储在ArrayList中。我可以充气,但它只得到充气的最后一个增值

根据用户位置,共有7个项目,不同位置的项目可能有所不同。这七项是(A、B、C、D、E、F、G)

我正在测试它是否打印了所有的七个项目。但它只打印“G”,因为它在HashMap的末尾添加了“G”。但是,所有值都存储在Arraylist中

以下是onBindViewHolder和getItemCount的代码I

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

ProductList data;
int n=0;
for (HashMap<Integer, Object> mapEntry: itemDataList){
   //mapEntery shows size: 3 and 
   //itemDataList shows size: 7 IDK Why there is a mismatch also.
   //Size of itemDataList is accurate which is why its prints 7 times

  data = (ProductList) mapEntry.get(n)
     System.out.println(data);

        holder.recyclerViewItemNameAdapter.setText(data.getITEM_NAME());
               n++;
  }
} 
  @Override
   public int getItemCount() {
    return itemDataList.size();
}
@覆盖
public void onBindViewHolder(@NonNull ViewHolder,int位置){
产品列表数据;
int n=0;
for(HashMap映射条目:itemDataList){
//Mapentry显示大小:3和
//itemDataList显示大小:7 IDK为什么也存在不匹配。
//itemDataList的大小是准确的,这就是它打印7次的原因
数据=(ProductList)mapEntry.get(n)
系统输出打印项次(数据);
holder.RecycleServiceItemNameAdapter.setText(data.getITEM_NAME());
n++;
}
} 
@凌驾
public int getItemCount(){
返回itemDataList.size();
}
我的主要活动:

                ValueEventListener eventListener= new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){

                        int n=0;
                        for (DataSnapshot ds: dataSnapshot.getChildren()){

                            for (int i=0; i<LocateUID.size();i++){

                                String uid= LpcateUID.get(i);
                                String dsUID= ds.getKey();

                                final HashMap<Integer, Object> id = new HashMap<>();

                                if(dsUID.equals(uid)){

                                    for (DataSnapshot d: ds.getChildren()){

                                        productList.setITEM_NAME(d.child("item_NAME").getValue(String.class));
                                        id.put(n,productList);

                                        arrayListProduct.add(id);
                                        n++;

                                    }

                                }

                            }

                        }


                    }

                    RecyclerItemList();

                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            };
ValueEventListener eventListener=新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
int n=0;
对于(DataSnapshot ds:DataSnapshot.getChildren()){

对于(int i=0;i,每次渲染项目时,您都会迭代整个列表。我不建议这样做,因为这是一个耗时的过程。您的方法总是以最后一个项目为结果。请尝试下面的方法

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {   
            ProductList data = itemDataList.get(position);   
            System.out.println(data);
            holder.recyclerViewItemNameAdapter.setText(data.getITEM_NAME());
        }

我想说,您可以在
onDataChange
上进行更多优化。谢谢@learner,您在解决这个问题上帮了我很多。我终于能够通过使用对象数组来解决它,但是,我的代码还有一个问题,即变量是静态的,最终用最后一个变量替换了所有变量在ArrayList中更新,我甚至没有想到。它在这里:

              for (DataSnapshot d: ds.getChildren()){
              productList.setITEM_NAME(d.child("item_NAME").getValue(String.class));
                                        id.put(n,productList);
                                        // Here this variable "n" was static 
                                        //because of that all the values were replace
    
                                        arrayListProduct.add(id);
                                        n++;


我做了一些更改,因为我在ArrayList中使用了Array的对象。通过它,我终于能够解决问题。编码愉快!!

我的意思是我只得到了“G”值打印了7次。我已经尝试了您的代码,但是我在
ArrayList itemDataList
中存储的值与我使用
int
作为值作为键和
ProductList
作为对象时的值有点不同,其中
int
值随着
ProductList
对象的存储而递增。因此,t不同的
对象的
int
值是不同的。因此,当我使用你的
code
时,我会得到空值。我知道在存储值并检查后,我发现所有的值都是相同的。我使用的
int
似乎是静态的,最终取代了所有的e值与映射中最后更新的值。我必须尝试不同的方法将值存储在映射中。您能建议一种不同的方法吗,因为我的代码中的错误是由于静态值。并且我无法找到HashMap的as链接或相关信息。由于n++每次迭代都会递增,因此不可能重写,但每个项都可能有除了Map中的值之外,我建议不要嵌套集合,如果嵌套,则需要在适配器中进行迭代。我建议您根据需要组织数据和处理逻辑,并将其作为Arraylist发送到适配器