2016-05-14 109 views
2

我正在研究android應用程序,並且我打了一面牆,並且想要實現一個複雜的佈局層次結構。應用程序將列出咖啡店的菜單。截至目前,菜單如下:Android ExpandableListView具有項目的自定義複雜佈局

enter image description here

列表被實現爲RecyclerView。視圖的自定義適配器負責處理每個元素的操作。觸摸某個元素會增加訂單價格,並將總計選定的元素加1。您也可以單擊該號碼以獲取提貨對話框並更改金額。

正如你可以想象的那裏有很多代碼。

這是理論上的佈局我想要實現:

enter image description here

我專注於內部ExpandableListView。基本上我想通過食物,飲料等對菜單項進行分類。

我遇到的問題是我不知道如何保留項目佈局的「複雜性」。我已經成功地創建一個簡單的ExpandableListView只有項目名稱,像這樣:

enter image description here

但我真的不知道如何使用我的ExpandableListView內以前的佈局創建項目適配器。不幸的是,我不能分享太多的代碼,但我沒有要求提供代碼片段,但更多的是關於如何實現這一點,想法,技巧的定位......這是我第一個Android應用程序:-)

任何幫助將非常感激。

非常感謝!

回答

2

嗯,我發現了一個解決方案,我的問題,在一天結束時並不那麼複雜。如果有人遇到同樣的情況,我會盡量總結一下。

首先,你將不得不爲你的ExpandableListView創建一個自定義適配器。我的前一個RecyclerView有一個自定義適配器,它使用了ViewHolder模式,這讓我感到困惑。

This示例實際上對了解如何實現自定義適配器非常有用。重寫的重要方法是getChildView。在該方法中,構建了整個子視圖。

@Override 
public View getChildView(int listPosition, final int expandedListPosition, 
          boolean isLastChild, View convertView, ViewGroup parent) { 
     final MenuItem item = (MenuItem) getChild(listPosition, expandedListPosition); 

     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.menu_item, null); 
     } 

     // Save final reference to be able to access it in inner classes 
     final View finalConvertView = convertView; 

     // Set the item name 
     TextView itemName = (TextView) convertView.findViewById(R.id.item_menu_name); 
     itemName.setText(item.getName()); 

     // Set item price 
     TextView itemPrice = (TextView) convertView.findViewById(R.id.item_menu_price); 
     itemPrice.setText(item.getFormattedPrice()); 

這不是完整的代碼,但是你可以看到它的剛開的意見在menu_item.xml佈局和我用Android data bingind之前填充它們:-)

的問題,但我不不知道如何在沒有ViewHolder的情況下使用它。