0

中拋出異常異常我的回收視圖存在問題,或者更準確地說是使用次級ArrayList用於在每個視圖中設置值。Recyclerview ArrayList在Android

我有一個項目列表發送到我的適配器,並在其構造函數中創建列表的大小列表。項目的數組列表正常工作,但包含所有數字的整數列表中的第二個數組列表說明了outofbounds。快速的logD顯示,多數民衆贊成並非如此,有1的有名單,但每次我試圖在索引0

級高清

RecyclerView recyclerView; 
ItemAdapter itemAdapter; 
List<Item> items; 
List<Boolean> itemsSelected; 
List<Integer> quantities; 

的OnCreate

quantities = new ArrayList<>(); 
訪問此其outofbounds

創建適配器的項目列表的方法並且還創建等於1的列表的列表

for (int i = 0; i <categories.size() ; i++) { 
       long length = dataSnapshot.child(categories.get(i)).getChildrenCount(); 
       Iterator<DataSnapshot> toAdd= dataSnapshot.child(categories.get(i)).getChildren().iterator(); // this returns all the items in each category 
       for (int j = 0; j <length ; j++) { 
        DataSnapshot newData = toAdd.next(); 
        items.add(newData.getValue(Item.class)); 
        //quantities.add(Integer.valueOf(1)); 
        //itemsSelected.add(Boolean.valueOf(false)); 
        Log.d(TAG, "onDataChange: debug: "+ newData.toString()); 

       } 


      } 
      for (int i = 0; i < items.size() ; i++) { 
       quantities.add(i,Integer.valueOf(1)); 
       itemsSelected.add(i,Boolean.valueOf(false)); 
      } 
      itemAdapter = new ItemAdapter(items); 
      itemAdapter.notifyDataSetChanged(); 

在上面的代碼中,兩行註釋掉了另一個嘗試創建一個列表,但它也有相同的錯誤,所以我將它移動到一堆其他地方。

我也是在這裏做的適配器構造

public ItemAdapter(List<Item> items){ 
     this.items = items; 
     for (int i = 0; i < items.size() ; i++) { 
      quantities.add(i,Integer.valueOf(1)); 
      itemsSelected.add(i,Boolean.valueOf(false)); 
      Log.d(TAG, "ItemAdapter: quan "+ quantities.get(i)); 
      Log.d(TAG, "ItemAdapter: bool "+ itemsSelected.get(i)); 
     } 

相同LOGD顯示位置 典型日誌輸出

ItemAdapter: quan 1 
bindItem: quan [1, 1, 1, 1, 1, 1, 1, 1] 

我在做什麼錯。該列表即使在綁定項目時也存在,因爲如果我登錄整個列表而不是單個索引,則會輸出整個列表,但get(index)會導致outofbounds。

感謝您花時間看這個。

編輯:適配器代碼

private class ItemAdapter extends RecyclerView.Adapter<ItemHolder>{ 
    List<Item> items; 
    Item item; 

    public ItemAdapter(List<Item> items){ 
     this.items = items; 
     for (int i = 0; i < items.size() ; i++) { 
      quantities.add(i,Integer.valueOf(1)); 
      itemsSelected.add(i,Boolean.valueOf(false)); 
      Log.d(TAG, "ItemAdapter: quan "+ quantities.get(i)); 
      Log.d(TAG, "ItemAdapter: bool "+ itemsSelected.get(i)); 
     } 
    } 

    @Override 
    public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 
     View view= layoutInflater.inflate(R.layout.singleitem,parent,false); 
     return new ItemHolder(view); 
    } 

    @Override 
    public void onBindViewHolder(ItemHolder holder, int position) { 
     item = items.get(position); 
     holder.bindItem(item,position); 
    } 

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


} 
+0

你可以發佈你的適配器代碼 – MadScientist

+0

只是爲你添加它 – ah4444

回答

0

你如何訪問在您的適配器quantities列表?

解決這個可以通過工程量清單到適配器的構造函數,然後調用notifyDataSetChanged()方法,增加值,這兩個列表(記得加入&不是正在重置列表)後的一種方式。這將確保這兩個列表都使用適配器進行更新。

只是一個小小的懷疑。你爲什麼要在構造器中設置for循環。你打算實現什麼?

+0

嗨謝謝你的答案。 For循環在那裏,因爲我一直在嘗試找出什麼是錯的。它應該將數量設置爲項目列表的確切長度。我在適配器中通過在片段類中聲明數量來訪問數量。我會嘗試先創建兩個列表的解決方案,然後將它們傳遞給適配器,並返回給您結果,儘管我認爲之前曾嘗試過。原因是因爲當我突出顯示在視圖中的項目與該視圖的所有相應的項目是突出顯示,所以即時通訊嘗試跟蹤這些列表 – ah4444

+0

它其他視圖點亮。那麼這與你的名單無關。檢查[this](http:// stackoverflow。com/questions/34552070/dynamic-adding-views-in-a-recyclinglerview-only-to-current-item/42482524#42482524)stack post! – MadScientist

+0

嗨,感謝您的幫助。我通過在同一個地方創建它們並將它們傳入到適配器中,將其列入適配器。至於其他視圖,我檢查了鏈接,但最終以這種方式繼續。列表的目的是跟蹤已選擇的內容,以便當我上下滾動時,選擇仍然存在。不能確定如果onViewRecycled將持續 – ah4444