2015-12-11 72 views
0

我正在嘗試爲每行創建一個listview:標題和項目網格。通過下面的代碼,我得到了正確的標題列表,但每行的gridView都填充了最後一行的項目。Listview中的Gridview正在重複每行的最後一個GridView項目

日誌記錄顯示,每次調用getView時,都會獲取正確標題的正確項目。我懷疑有一個共享引用,或者我在某處寫錯了一行。

類似的問題都是回收視圖的問題,我正在做的是正確的。

gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.getGridItems()); 

的問題不是其每單實例適配器:

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = l_Inflater.inflate(R.layout.list_item_my_listview, null); 
     holder = new ViewHolder(); 
     holder.txt_name = (TextView) convertView.findViewById(R.id.name); 
     holder.myGridView = (GridView) convertView.findViewById(R.id.my_gridview); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    listItemDetails item = itemDetailsArrayList.get(position); 
    holder.txt_name.setText(item.name); 

    gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.getGridItems()); 
    holder.myGridView.setAdapter(gridArrayAdapter); 

    Util.Log(getClass().getName()); 
    Util.Log(cabinetId + " - " + cabinet.getCageList().size()); 
    return convertView; 
} 
+0

您對所有行使用相同的適配器。所以,當最後一行得到更新時,所有網格項的值都是相同的... – HourGlass

+0

@HourGlass這將解釋它。但是每次調用getView時,我都會用正確的項目創建gridItemListAdapter的新實例。它是如何相同的? – David

+0

你能否檢查你的數據,是否所有的數據都是唯一的? –

回答

1

就像我上面的評論說,當你的項目上item.getGridItems()GridView在這條線出現問題。最後一行的dup會發生,因爲 - 我會嘗試猜測你的結構,我不知道但是我看到了線索 - 每當你調用這個方法時,你可能會使用相同的array,所以相同的值。
因此,每個適配器實例中的每個GridItems引用都會更改最後一行的最後一次更新。

當我做了測試來解決這個問題時,我通過調用對象處理來避免在我的適配器中通過getView()中的額外工作獲得它。我使用了一個已經設置好的對象字段。爲了得到GridView的項目item.name如下:所以,你必須做的像你項目的名稱

gridItemListAdapter gridArrayAdapter = new gridItemListAdapter(context, item.gridItems); 

它應該是這樣的你Item對象:

public ArrayList<Images> gridItems; // arraylist or whatever 
... 
public void setGridItems(ArrayList<Images> gridItems) { // set it when you set the name 
    this.gridItems = gridItems; 
} 

因此,對於每個實例,Item對象將有新的GridItems