Android ExpandableListView具有自定义项目的复杂布局
作者:互联网
我正在开发一个android应用程序,但遇到了要实现的复杂布局层次结构.该应用程序将列出一个咖啡厅的菜单.截至目前,菜单如下所示:
该列表实现为RecyclerView.视图的自定义适配器负责每个元素的操作.触摸一个元素会增加定单价格,并将1加到所有选定元素中.您也可以单击数字以获取代答对话框并更改金额.
您可以想象那里有很多代码.
这是我要实现的理论布局:
我专注于内部ExpandableListView.基本上我想按食物,饮料等对菜单项进行分类.
我的问题是我不知道如何保留项目布局的“复杂性”.我已经设法仅使用项目名称创建了一个简单的ExpandableListView,如下所示:
但是我真的不知道如何使用我为ExpandableListView中的先前布局创建的项目适配器.不幸的是,我不能共享太多代码,但是我并不需要代码片段,而是更多关于如何实现此功能的指导,想法,技巧…这是我的第一个Android应用程序:-)
任何帮助将不胜感激.
非常感谢!
解决方法:
好吧,我找到了解决我问题的方法,但最终并没有那么复杂.我会尝试总结一下,以防有人遇到同样的情况.
首先,您将必须为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的情况下使用它.
标签:android-layout,android,user-experience 来源: https://codeday.me/bug/20191118/2029847.html