Android 具有自定义项目复杂布局的 ExpandableListView

Android ExpandableListView with custom complex layout for items

我正在开发一个 android 应用程序,但我遇到了要实现的复杂布局层次结构的障碍。该应用程序将列出咖啡馆的菜单。截至目前,菜单如下所示:

列表实现为 RecyclerView。视图的自定义适配器负责每个元素的操作。触摸一个元素会增加订单价格并将所选元素总数加 1。您还可以单击该数字以获取提货对话框并更改金额。

你可以想象那里有很多代码。

这是我要实现的理论布局:

我专注于内心 ExpandableListView。基本上我想按食物、饮料等对菜单项进行分类。

我遇到的问题是我不知道如何保留项目布局的 "complexity"。我设法创建了一个简单的 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 的情况下使用它。