其他分享
首页 > 其他分享> > Android ExpandableListView具有自定义项目的复杂布局

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

作者:互联网

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

enter image description here

该列表实现为RecyclerView.视图的自定义适配器负责每个元素的操作.触摸一个元素会增加定单价格,并将1加到所有选定元素中.您也可以单击数字以获取代答对话框并更改金额.

您可以想象那里有很多代码.

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

enter image description here

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

我的问题是我不知道如何保留项目布局的“复杂性”.我已经设法仅使用项目名称创建了一个简单的ExpandableListView,如下所示:

enter image description here

但是我真的不知道如何使用我为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