首页
学习
活动
专区
工具
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 列表项 <img src

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

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

    2.1K60

    UITableView在Flutter是什么?

    ListView 在FlutterListView可以沿一个方向(垂直或者水平方向)来排列其所有Widget,因此常被用于需要展示一组连续视图元素场景,比如通讯录、优惠券、商家列表等。...如下所示,我定义了一组列表项组件,并将他们放在了垂直滚动ListViewListView( 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属性,如此就可以看到图标了。...现在矢量定义好了,我们只需要在ListViewgetIcon()方法返回我们定义矢量名称就可以实现圆形图标了: listView.getIcon = function(data){    return...首先先来了解下ListViewhandleDragAndDrop()方法,draganddrop一共有4个状态:prepare、begin、between和end,更具这4个不同状态来做不同业务处理...在begin状态时根据鼠标当前位置设置canvas对象left和top属性,并将其添加到DOM树; 3.

    82920

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

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

    1.1K60

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

    4.5K20

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

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

    55740

    Android – Drawable 详解

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

    5.4K50

    《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.6K20

    基于 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
    领券