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
的情况下使用它。
我正在开发一个 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
的情况下使用它。