8

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

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

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

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

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

4

4 回答 4

26

Android ExpandableListView 可以在 Group 或 child 中有任何按钮。

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

editButton.setFocusable(false);

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

于 2013-10-30T07:08:39.063 回答
2

您需要使用包含按钮的自定义 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>

然后,您必须创建一个扩展 BaseExpandableListAdapter 的自定义 ExpandableListAdapter 并在 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
        }
    });
}

希望这可以帮助。

于 2012-05-30T16:21:37.010 回答
1

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

android:focusable="false"

例子:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"/>
于 2018-11-12T12:06:30.230 回答
0

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

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

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

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

我创建的 ExpandableListView 可以做和标准一样的事情,甚至更多。只是无法判断性能是否受损,但没有注意到任何明显的问题。

于 2012-05-30T16:10:06.470 回答