如何在ExpandableListView中的组项中放置一个按钮?

时间:2012-05-29 01:50:39

标签: android events button expandablelistview

我正在为Android开发一个应用程序。

如何将一个按钮放在ExpandableListView组中?

单击该按钮将显示一个对话框,而不是打开或关闭该组。单击按钮外部,该组应该正常打开和关闭。

下图显示了我要插入按钮的位置。

http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png

4 个答案:

答案 0 :(得分:24)

Android ExpandableListView可以包含Group或child中的任何按钮。

确保按钮在适配器中不像下面那样可对焦。

editButton.setFocusable(false);

这将有助于单击group.parent中的Group和Button单独

答案 1 :(得分:1)

您需要使用包含按钮的自定义XML文件来扩充groupView(例如inflate_xml_groupview.xml):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/FrameLayoutGroupView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">


    <Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ButtonOfMyExpandableListGroupView"
        android:visibility="visible" />

</FrameLayout>

然后你必须创建一个自定义的ExpandableListAdapter来扩展BaseExpandableListAdapter并获取getGroupView()方法上的Button,如下所示:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {

        convertView = inflater.inflate(R.layout.inflate_xml_groupview, null);
        holder = new ViewHolder();
        holder.Button = (Button) convertView.findViewById(R.id.myButton);
        convertView.setTag(holder);
        } else {
        holder = (ViewHolder) convertView.getTag();
        }
        holder.position = ListOfItems.get(groupPosition).getPosition();
        Button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                Toast.makeText(getApplicationContext(), "Button " + groupPosition + " is clicked !", Toast.LENGTH_SHORT).show();
               // DO STUFF
        }
    });
}

希望这有帮助。

答案 2 :(得分:1)

要提供基于XML的解决方案,只需将以下行添加到控件中。

this

示例:

android:focusable="false"

答案 3 :(得分:0)

我创建了自己的ExpandableListView。我在XML和类中使用布局来构建组件。

令人惊讶的是,这很容易做到。

比标准的ExpandableListView更容易理解,因为我为列表的每个元素创建了一个类和一个布局(对于列表本身,对于组和项目)。没有必要弄乱地图列表,这在我看来会降低代码的表现力和可读性。

此外,该列表变得非常灵活和可定制。我可以在运行时轻松添加和删除组和项。现在我可以自由修改列表的外观和内部组件。

我创建的ExpandableListView可以执行与标准相同的操作。只是无法判断性能是否受损,但没有发现任何明显的问题。