Android 将侦听器添加到可展开列表项中的子节点

Android 将侦听器添加到可展开列表项中的子节点,android,android-listview,Android,Android Listview,我使用了教程中给出的代码 我已附上ExpandableListView的图像 我需要一些关于如何将侦听器添加到单个子节点的代码示例,例如,单击地址应该将用户带到另一个活动。 期待您的回复。 谢谢。好的,您不能使用上面的示例将侦听器添加到您的子视图中。您必须有一个自定义适配器。在这个自定义适配器的getChildView和getGroupView中,您可以提供自己的侦听器。例如 public View getGroupView( int groupPosition,

我使用了教程中给出的代码 我已附上ExpandableListView的图像

我需要一些关于如何将侦听器添加到单个子节点的代码示例,例如,单击地址应该将用户带到另一个活动。 期待您的回复。
谢谢。

好的,您不能使用上面的示例将侦听器添加到您的子视图中。您必须有一个自定义适配器。在这个自定义适配器的
getChildView
getGroupView
中,您可以提供自己的侦听器。例如

public View getGroupView(
            int groupPosition, 
            boolean isExpanded,
            View convertView, 
            ViewGroup parent) {

        ViewGroup viewGroup = null;
        if (convertView == null) {
            LayoutInflater li = (LayoutInflater) getApplication().getSystemService(LAYOUT_INFLATER_SERVICE);
            if (li != null) {
                viewGroup = (ViewGroup) li.inflate(R.layout.listitems_group, parent, false);
            }
        } else {
            viewGroup = (ViewGroup) convertView;
        }

            Button button = (Button) viewGroup.findViewById(R.id.group_button);
            button.setOnClickListener(new OnClickListener() {
                 void onClick(View v) {
                     // Do what you want here
                 }
            });
            return viewGroup;
}

这里我在我的GroupView中有一些按钮,我想添加onClick listener的按钮。

您还可以让您的活动覆盖onChildClick方法:

@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long id) {
    //implement logic to start the appropriate activity for this child.
}
从android开发人员站点:


我还建议下载。您可以了解有关设置的更多信息。

我无法完全理解代码,您的意思是说我不应该使用SimpleExpandableListAdapter,而应该使用自定义适配器,为了更好地理解,我不熟悉android的任何链接。谢谢。是的,我就是这个意思。看看这个有点关联的帖子:Scott在下面给出的方法是有效的,但问题是如何从该子节点获取文本……好吧,这个方法只有在您试图捕获对列表视图项(即整行)的单击时才有效。如果行由多个视图组成,则此方法不会标识(行中视图组的)已单击的子视图。调用它时引用了包含的视图组。举例来说,假设您的行由一个
LinearLayout
root
和两个
TextView
child1
child2
组成。如果我们单击
child1
,将调用
onChildClick
,但引用的是
root
,而不是我们可能认为的
child1
。感谢您提供的信息。我还没有创建一个具有多个可单击视图的子项的可扩展列表视图。@Scott谢谢,但我如何才能获得该组或父节点的子节点中显示的电话号码,以便调用某个活动来调用该特定号码。您可以使用onChildClick方法的参数。使用“查看”从单击的列表项获取数据。或者您可以使用groupPosition和childPosition。您可以将发送到适配器中的组和子数据设置为活动中的字段变量。然后使用groupPosition和childPosition检索组中单击的子级的数据。请参阅上面的@Scott answer(+1)。我现在明白你想做什么了。如果您只需要给定行代表的电话号码,只需使用
onChildClick
,并使用
groupPosition
childPosition
从适配器中使用
SimpleExpandableListAdapter::getChild
获取数据。这种情况下不需要自定义适配器。如果你需要更多信息,请告诉我。
@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int groupPosition, int childPosition, long id) {
    //implement logic to start the appropriate activity for this child.
}