我正在为 Android 开发一个应用程序。
如何将一个按钮放在一组 ExpandableListView 中?
通过单击按钮,将显示一个对话框,而不是打开或关闭组。单击按钮外部,该组应正常打开和关闭。
下图显示了我想插入按钮的位置。
http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png
我正在为 Android 开发一个应用程序。
如何将一个按钮放在一组 ExpandableListView 中?
通过单击按钮,将显示一个对话框,而不是打开或关闭组。单击按钮外部,该组应正常打开和关闭。
下图显示了我想插入按钮的位置。
http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png
Android ExpandableListView 可以在 Group 或 child 中有任何按钮。
确保按钮在适配器中不能像下面那样聚焦。
editButton.setFocusable(false);
这将有助于分别单击 group.parent 中的 Group 和 Button
您需要使用包含按钮的自定义 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
}
});
}
希望这可以帮助。
要提供基于 XML 的解决方案,您只需将以下行添加到控件中。
android:focusable="false"
例子:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"/>
我创建了自己的 ExpandableListView。我使用 XML 和类中的布局来构建组件。
令人惊讶的是,这很容易做到。
它比标准的 ExpandableListView 更容易理解,因为我为列表的每个元素(为列表本身、组和项目)创建了一个类和一个布局。没有必要弄乱地图列表的列表,我认为这会降低代码的表达性和可读性。
此外,该列表变得非常灵活和可定制。我可以在运行时轻松添加和删除组和项目。现在我可以自由修改列表的外观和内部组件了。
我创建的 ExpandableListView 可以做和标准一样的事情,甚至更多。只是无法判断性能是否受损,但没有注意到任何明显的问题。