首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将不同的图标添加到可扩展ListView中的子元素?

要将不同的图标添加到可扩展ListView中的子元素,可以按照以下步骤进行操作:

  1. 创建一个自定义的适配器类,继承自BaseExpandableListAdapter,并重写相应的方法。
  2. 在适配器的getChildView()方法中,根据子元素的位置获取对应的图标资源,并将其设置到子元素的视图中。
  3. 在适配器的getGroupView()方法中,根据组元素的位置获取对应的图标资源,并将其设置到组元素的视图中。
  4. 在布局文件中,为子元素的视图添加一个ImageView控件,用于显示图标。
  5. 在数据源中,为每个子元素和组元素设置一个标识符,用于区分不同的图标。
  6. 在Activity或Fragment中,创建一个可扩展ListView的实例,并设置适配器。
  7. 将数据源中的数据添加到适配器中。
  8. 设置可扩展ListView的监听器,以便在展开或折叠组元素时更新视图。

以下是一个示例代码,演示如何将不同的图标添加到可扩展ListView中的子元素:

代码语言:txt
复制
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<String> groups;
    private Map<String, List<String>> children;
    private Map<String, Integer> icons;

    public MyExpandableListAdapter(Context context, List<String> groups, Map<String, List<String>> children, Map<String, Integer> icons) {
        this.context = context;
        this.groups = groups;
        this.children = children;
        this.icons = icons;
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        String group = groups.get(groupPosition);
        return children.get(group).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        String group = groups.get(groupPosition);
        return children.get(group).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.group_item_layout, null);
        }

        ImageView icon = convertView.findViewById(R.id.group_icon);
        String group = groups.get(groupPosition);
        int groupIconRes = icons.get(group);
        icon.setImageResource(groupIconRes);

        TextView groupName = convertView.findViewById(R.id.group_name);
        groupName.setText(group);

        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.child_item_layout, null);
        }

        ImageView icon = convertView.findViewById(R.id.child_icon);
        String group = groups.get(groupPosition);
        String child = children.get(group).get(childPosition);
        int childIconRes = icons.get(child);
        icon.setImageResource(childIconRes);

        TextView childName = convertView.findViewById(R.id.child_name);
        childName.setText(child);

        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

在上述代码中,我们使用了两个布局文件,一个用于显示组元素(group_item_layout.xml),一个用于显示子元素(child_item_layout.xml)。这两个布局文件中都包含一个ImageView控件和一个TextView控件,用于显示图标和文本内容。

使用该适配器时,可以按照以下步骤进行操作:

代码语言:txt
复制
// 创建数据源
List<String> groups = new ArrayList<>();
groups.add("Group 1");
groups.add("Group 2");

Map<String, List<String>> children = new HashMap<>();
List<String> children1 = new ArrayList<>();
children1.add("Child 1");
children1.add("Child 2");
List<String> children2 = new ArrayList<>();
children2.add("Child 3");
children2.add("Child 4");
children.put("Group 1", children1);
children.put("Group 2", children2);

Map<String, Integer> icons = new HashMap<>();
icons.put("Group 1", R.drawable.group_icon);
icons.put("Group 2", R.drawable.group_icon);
icons.put("Child 1", R.drawable.child_icon);
icons.put("Child 2", R.drawable.child_icon);
icons.put("Child 3", R.drawable.child_icon);
icons.put("Child 4", R.drawable.child_icon);

// 创建适配器
MyExpandableListAdapter adapter = new MyExpandableListAdapter(this, groups, children, icons);

// 设置适配器
ExpandableListView expandableListView = findViewById(R.id.expandable_list_view);
expandableListView.setAdapter(adapter);

在上述代码中,我们创建了一个包含两个组元素和四个子元素的数据源,并为每个元素指定了对应的图标资源。然后,我们创建了一个自定义的适配器实例,并将其设置到可扩展ListView中。

这样,就可以将不同的图标添加到可扩展ListView中的子元素了。根据实际需求,可以根据子元素的位置或内容来选择不同的图标,并通过适配器将其显示在子元素的视图中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter中构建布局 顶

首先,确定更大的元素。 在这个例子中,四个元素排列成一列:一个图像,两行和一个文本块。 ? ? ? ? 接下来,绘制每一行。 第一行称为标题部分,有三个孩子:一列文字,一个星形图标和一个数字。...如果所有布局小部件带有一个子元素(例如Center或Container),则它们具有一个child属性,如果它们带有小部件列表(例如Row,Column,ListView或Stack),则它们具有children...GridView: 放置小部件作为可滚动的网格。 ListView: 将小部件列为可滚动列表。 Stack: 将小部件重叠在另一个小部件之上。...使用Stack将渐变叠加到图像的顶部。 渐变确保工具栏的图标与图像不同。...在Flutter中添加资产和图像:说明如何将图像和其他资源添加到应用程序包中。 Flutter从0到1:一个人写他的第一个Flutter应用程序的经验。

43.1K10

在 jQuery Mobile 中使用 UI 组件

在 jQuery Mobile 中,页眉的默认用法是作为固定在 Web 页面顶部的页面标题;在大部分情况下,页脚是 Web 页面中的最后一个元素,并且包括版权信息、其他超链接等内容。...利用 jQuery Mobile,您可以创建多种不同的列表格式,如基本链接列表、嵌套列表、编号列表、拆分按钮列表、带分隔符的列表、带图标的列表、缩略图或计数泡泡,以及包括搜索筛选器栏的列表。...该列表项还包括一个用作在对话框中购买该列表项的一个超链接的图标。您也可以使用 data-split-icon 属性,修改显示在列表项右侧的拆分按钮的默认图标。 另一个有用的基本列表增强是列表分隔符。...您也可以通过使用图标、缩略图和计数泡泡来创建不同的视觉样式。您可以通过使用 ul-li-count 类,将计数泡泡添加到一个列表项(清单 9)。 清单 9....将图标添加到 jQuery Mobile 列表项 listview"> <img src

8.1K20
  • Android ListView功能扩展,实现高性能的瀑布流布局

    比如说目前ListView中有两列内容,那么获取屏幕中的第一个元素和最后一个元素其实意义是不大的,因为在有多列内容的情况下,我们需要找到的是最靠近屏幕上边缘和最靠近屏幕下边缘的元素,因此这里就需要写一个算法来去计算...getColumnToAppend()方法是用于判断当ListView向下滑动时,新进入屏幕的子View应该添加到哪一列的。...而判断的逻辑也很简单,其实就是遍历瀑布流ListView的每一列,取每一列的最下面一个元素,然后再从中找出最靠上的那个元素所在的列,这就是新增子View应该添加到的位置。...getColumnToPrepend()方法是用于判断当ListView向上滑动时,新进入屏幕的子View应该添加到哪一列的。...但瀑布流ListView则不一样了,列数不同,每列的宽度也会不一样,因此这个值我们需要提前进行计算。

    2.1K60

    UITableView在Flutter中是什么?

    ListView 在Flutter中,ListView可以沿一个方向(垂直或者水平方向)来排列其所有子Widget,因此常被用于需要展示一组连续视图元素的场景,比如通讯录、优惠券、商家列表等。...如下所示,我定义了一组列表项组件,并将他们放在了垂直滚动的ListView中: ListView( children: [ //设置ListView组件的标题与图标...,用于1~3行(leading、title、subtitle)展示文本、图标等视图元素的场景,通常与ListView配合使用。...在CustomScrollView中,这些彼此独立的、可滚动的Widget被称为Sliver。...总结 在处理展示一组连续、可滚动的视图元素的场景中,Flutter提供了比原生Android、iOS系统更为强大的列表组件ListView与CustomScrollView。

    5.6K10

    HT for Web列表和3D拓扑组件的拖拽应用

    ~ oh no~还是什么都没有,是不是还少了点什么呢~对了,忘记给ListView组件添加铺满浏览器的样式了,将厦门的样式添加到head标签中:     html, body {         ...方法返回数据中定义的ProductId属性,如此就可以看到图标了。...现在矢量定义好了,我们只需要在ListView的getIcon()方法中返回我们定义的矢量名称就可以实现圆形图标了: listView.getIcon = function(data){    return...首先先来了解下ListView的handleDragAndDrop()方法,draganddrop一共有4个状态:prepare、begin、between和end,可更具这4个不同状态来做不同的业务处理...在begin状态时根据鼠标当前位置设置canvas对象的left和top属性,并将其添加到DOM树中; 3.

    83120

    HT for Web列表和3D拓扑组件的拖拽应用

    ~ oh no~还是什么都没有,是不是还少了点什么呢~对了,忘记给ListView组件添加铺满浏览器的样式了,将厦门的样式添加到head标签中: html, body {...方法返回数据中定义的ProductId属性,如此就可以看到图标了。...现在矢量定义好了,我们只需要在ListView的getIcon()方法中返回我们定义的矢量名称就可以实现圆形图标了: listView.getIcon = function(data){ return...首先先来了解下ListView的handleDragAndDrop()方法,draganddrop一共有4个状态:prepare、begin、between和end,可更具这4个不同状态来做不同的业务处理...在begin状态时根据鼠标当前位置设置canvas对象的left和top属性,并将其添加到DOM树中; 3.

    1.1K60

    【QT】控件 -- 多元素类 | 容器类 | 布局类

    QListWidgetItem* old) 选中不同元素时会触发....参数是当前选中的元素和之前选中的元素 currentRowChanged(int) 选中不同元素时会触发....可以包含多个文本和图标,每个文本 / 图标为一个列 虽然 QTreeWidget 是树形结构,但是这个树形结构没有体验出根节点的,是从根节点的下一次子节点开始 可以给 QTreeWidget 设置顶层节点...Layout 只是用于界面布局,并没有提供信号 【使用 QVBoxLayout 管理多个控件】 编写代码,创建布局管理器和三个按钮,并且把按钮添加到布局管理器中 使用 addWidget 把控件添加到布局管理器中...下方边距 layoutSpacing 相邻元素之间的间距 【使用 QHBoxLayout 管理控件】 编写代码,创建布局管理器和三个按钮,并且把按钮添加到布局管理器中,并且运行 可以看到此时界面上的按钮就存在于布局管理器中

    12710

    Flutter可滑动组件

    1.3 ListTile 在开发中,我们经常见到一种列表,有一个图标或图片(Icon),有一个标题(Title),有一个子标题(Subtitle),还有尾部一个图标(Icon)。...,如果横轴长度是450,那么当maxCrossAxisExtent的值在区间[450/4,450/3)内的话,子元素最终实际长度都为112.5。...Viewport:显示的视窗,即列表的可视区域; Sliver:视窗里显示的元素 前面介绍的 ListView、GridView都是一个完整的可滚动组件。...如果我们想要在一个页面中,同时包含多个可滚动组件,且使它们的滑动效果能统一起来,比如一个滑动的视图中包括一个列表视图(ListView),一个网格视图(GridView),且让他们的滑动效果统一。...Flutter官方文档中提到,ListView的默认构造器建议在需要展示的元素个数较少时使用,在展示的元素数量较多时,建议使用ListView.builder() 方法构造视图。

    7.2K30

    Flutter开发-可滚动组件

    我们先介绍一下常用的可滚动组件(如ListView、GridView等) SingleChildScrollView SingleChildScrollView类似于Android中的ScrollView...ListView ListView是最常用的可滚动组件之一,它可以沿一个方向线性排布所有子组件,并且它也支持基于Sliver的延迟构建模型。...注意,这里的子元素指的是子组件的最大显示空间,注意确保子组件的实际大小不要超出子元素的空间。...,子元素最终实际长度都为112.5,而childAspectRatio所指的子元素横轴和主轴的长度比为最终的长度比。...可滚动组件的Sliver版 但是在CustomScrollView中,需要粘起来的可滚动组件就是CustomScrollView的Sliver了,如果直接将ListView、GridView作为CustomScrollView

    4.5K20

    Android – Drawable 详解

    用法 在不同情况下有很多可绘制的类型,设置按钮的状态行为,创建可伸缩的按钮背景和创建复合可绘制图层。...Drawable List 状态集合 StateListDrawable是一个在XML中定义的可绘制对象,根据对象的状态,使用多个不同的图像来表示相同的图形。...列表中的每个drawable都按照列表的顺序绘制 - 列表中的最后一个drawable绘制在顶部。每个drawable由单个元素内的元素表示。...NinePatch是具有.9.png文件扩展名的图像,表示这是一个可伸缩的PNG图像。该文件与正常的PNG文件没有什么不同,除了您将添加细黑线以指示图像的垂直和水平“可拉伸”和“填充”区域。...接下来,让我们将边框和选择器状态添加到活动布局文件中的现有ListView: ListView ...

    5.4K50

    【Hybrid开发高级系列】ReactNative(七) —— RN组件专题

    工具栏可以显示一个标志,导航图标(如汉堡包菜单),标题 和副标题和操作列表。标题和子标题被扩展这样以来标志和导航图标显示在左边,标题和副标题在中间并且操作 在右边。         ...最小的API是创建一个ListView.DataSource,用一个简单的数组数据的blob填充,并用那个数据源实例化一个ListView组件和一个renderRow回调,它会从数组数据中带走一个blob...在默认情况下,标签是通过遍历所有孩子和累积所有由空间隔开的文本节点创建的。     accessible布尔型         当它的值为真时,说明视图是一个可访问的元素。...在默认情况下,所有的可触发的元素都是可以被访问的。     ...这是导致网页的帧数下降的其中一个重要的原因,因为解析工作会被执行在主线 程中。在React Native中,图片的解析会在不同的线程中执行。

    58340

    《Flutter》-- 6.高级组件

    6.1.1 Scrollable组件 在Flutter中,一个可滚动的组件直接或间接包含一个Scrollable组件,它是可滚动组件的基础组件。...目前,可滚动组件中的大部分组件都支持基于Sliver的延迟构建模型,如ListView、GridView。...ListView可以沿一个线性方向排布相同或相似的子组件元素,并支持基于Sliver的延迟。...6.2.2 ListView.builder 使用ListView.builder创建的列表是基于Sliver的延迟加载创建的,渲染性能比较高,适合用于列表元素比较多的情况。...5个: 1)GridView():默认构造函数,适用于元素个数有限的场景,会一次性全部渲染children属性中的子元素组件; 2)GridView.builder():适用于构建大量或无限长的列表,它只会构建那些可见的组件

    10.7K20

    基于 HTML5 Canvas 的工控机柜 U 位动态管理

    getView() 返回的底层 div 元素添加到页面的 DOM 元素中,这里需要注意的是,当父容器大小变化时,如果父容器是 BorderPane 和 SplitView 等这些HT预定义的容器组件,则...这里先将整个右边的部分进行布局,下面代码中的变量 listBorder 为上图的左半部分,变量 borderPane 为上图的右半部分,至于鹰眼组件部分,是添加到在 borderPane 的上层: listView...这三个元素只需要通过 setItems 的方式添加到 toolbar 工具条组件上即可,元素的具体定义如下: var toolbarItems = [// 工具条上三个的元素 {...} }, ] 接下来只要把这个 item 添加到 toolbar 中并设置一下排布的方式即可: toolbar.setItems(toolbarItems);// 设置工具条元素数组...(e);// 传入逻辑坐标点或者交互event事件参数,返回当前点下的数据元素 listView.sm().ss(data);// 在拖拽的过程中设置列表组件中的被拖拽的元素被选中

    2.4K40
    领券