2016-03-01 99 views
2

我正在致力於電子商務應用程序。在這裏,我正在致力於產品過濾。 這裏的過濾器是動態的,這意味着一旦過濾器頁面將顯示品牌和價格,然後下一次它可以顯示品牌,價格,風格..等等。 過濾產品可能有很多情況。動態創建RecyclerView UI - Android

應用程序正在從Webservice動態接收過濾器。 所以我在這裏使用從web服務接收的數據動態創建過濾器。爲此,我使用RecyclerView來顯示動態過濾器 。

這裏是RecyclerView的代碼,我正在動態地創建過濾器。

onCreateViewHolder():現在

@Override 
public FilterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LinearLayout topLayout = new LinearLayout(mContext); 
    topLayout.setOrientation(LinearLayout.VERTICAL); 

    if (filterItems != null) { 
     for (int filterItemsCount = 0; filterItemsCount < filterItems.size(); filterItemsCount++) { 

      LinearLayout ll = new LinearLayout(mContext); 
      ll.setOrientation(LinearLayout.VERTICAL); 
      LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      layoutParams.setMargins(10, 10, 10, 10); 

      AFileterItem filterItem = filterItems.get(filterItemsCount); 
      TextView textView = new TextView(mContext); 
      textView.setText(filterItem.getFiletrLabel()); 
      ll.addView(textView); 

      for (int i = 0; i < filterItem.getList().size(); i++) { 
       VlauesItem item1 = filterItem.getList().get(i); 
       CheckBox cb = new CheckBox(mContext); 
       cb.setId(i); 
       cb.setText(item1.getValueItemLabel()); 

       cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
        @Override 
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
         Toast.makeText(mContext, String.valueOf(isChecked), Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       ll.addView(cb); 
      } 

      topLayout.addView(ll); 
     } 
    }else{ 
     topLayout.addView(null); 
    } 

    FilterViewHolder viewHolder = new FilterViewHolder(topLayout); 
    return viewHolder; 
} 

,問題是:

當我創建過濾器,然後動態地創建RecyclerView相同的過濾器一次以上。 我想知道如何管理上面的代碼,以便我可以消除此問題。

回答

1

您需要了解什麼是ViewHolders。具體類型的ViewHolder具有單一佈局。如果可以考慮創建不同的視圖持有者類型,或者使用預定義的佈局,將在onBind回調中進行自定義。你看到的情況正在發生,因爲RecyclerView重新使用視圖,並且只調用onCreateViewHolder來填充項目的屏幕,然後它們被重用。

+0

ViewHolder的具體類型具有單一佈局:我有一個頂部的單一佈局,即LinearLayout。 –

+0

如果可以考慮創建不同的視圖類型:我不需要在這裏創建不同的-2 ViewHolders,因爲我有一個頂層佈局 –

+0

或一個具有預定義佈局:我不能預定義佈局,因爲它不是要求。 –