我正在开发一个Android应用程序,而且我遇到了一个我想要实现的复杂布局层次结构的墙。该应用程序将列出咖啡店的菜单。截至目前,菜单如下所示:
该列表实现为RecyclerView
。视图的自定义适配器负责每个元素的操作。触摸元素会增加订单价格,并将所选元素的总数加1。您也可以单击该数字以获取提取对话框并更改金额。
你可以想象那里有很多代码。
这是我想要实施的理论布局:
我专注于内心ExpandableListView
。基本上我想按食物,饮料等对菜单项进行分类。
我遇到的问题是我不知道如何保留项目布局的“复杂性”。我设法创建了一个只有项目名称的简单ExpandableListView
,如下所示:
但我真的不知道如何使用我为ExpandableListView
中的先前布局创建的项目适配器。不幸的是我不能分享很多代码,但我不是要求代码片段,而是更多关于我如何实现这个,想法,提示的方向...这是我的第一个Android应用程序: - )
非常感谢任何帮助。
非常感谢!
答案 0 :(得分:3)
好吧,我找到了解决问题的方法,在一天结束时并没有那么复杂。我会尝试总结,以防有人遇到同样的情况。
首先,您必须为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
的情况下如何使用它。