热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在ExpandableListView中选择子项?

如何解决《如何在ExpandableListView中选择子项?》经验,为你挑选了1个好方法。

我已经问过这个问题,但没有成功.所以我再问一次(对不起btw).

我还有这个问题:

如何访问ExpandableListView中的项目?.

让我恢复 我的应用程序中有这种情况:

在此输入图像描述

我想在第二组的2dn项目上创建performClick().我目前所能做的就是使用这行代码用performClick()扩展第二组:

 mGattServicesList.performItemClick(mGattServicesList.getChildAt(1), 1, mGattServicesList.getItemIdAtPosition(1));

会心

private ExpandableListView mGattServicesList;

是不是有一种非常简单的方法可以对组内的项执行Click()?

我想这样做,因为我有一个类似的列表

private final ExpandableListView.OnChildClickListener servicesListClickListner =
        new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
                                        int childPosition, long id) {

但我不想单独点击该项目,我也找不到在该组中选择此特定项目的方法.

先感谢您



1> Jay Soyer..:

首先,ExpandableListView支持一种简单的方法来扩展您需要的组:

mGattServicesList.expandGroup(groupPosition);

以编程方式单击某个项目有点棘手.您使用该performItemClick()方法的方法正确,但您对如何使用它有点偏僻.我假设你没有使用标题.这进一步使事情复杂化.

首先,您需要获取要单击的视图.奇怪的是,这不是必需的.您可以performItemClick()使用null视图安全地调用.唯一的缺点是您的子单击侦听器也将收到空视图.

//First we need to pack the child's two position identifiers
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);

//Then we convert to a flat position to use with certain ListView methods
int flatPos = mGattServicesList.getFlatListPosition(packedPos);

//Now adjust the position based on how far the user has scrolled the list.
int adjustedPos = flatPos - mGattServicesList.getFirstVisiblePosition();

//If all is well, the adjustedPos should never be <0
View childToClick = mGattServicesList.getChildAt(adjustedPos);

现在我们需要提供的位置和ID performItemclick().您将看到步骤与检索视图类似.所以真的,你不必再进一步输出这个...但是要显示你需要的东西:

//You can just reuse the same variables used above to find the View
long packedPos = ExpandableListView.getPackedPositionForChild(int groupPosition, int childPosition);
int flatPos = mGattServicesList.getFlatListPosition(packedPos);

//Getting the ID for our child
long id = mGattServicesList.getExpandableListAdapter().getChildId(groupPosition, childPosition);

最后,你可以调用你的performItemClick():

performItemClick(childToClick, flatPos, id);

我应该在前言,我没有检查这个代码对IDE,所以可能会有一些语法错误,这将阻止编译.但总而言之,应该以编程方式单击子视图来传达不那么容易的步骤.

最后的注释,你提供的图片显示小组和子计数从1开始.请注意它们实际上被认为是基于零的位置.因此,第一组位于第0位,每组的第一个孩子位于第0位.


推荐阅读
author-avatar
勇气的爱_961
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有