我正在为Android开发一个应用程序。
如何将一个按钮放在ExpandableListView组中?
单击该按钮将显示一个对话框,而不是打开或关闭该组。单击按钮外部,该组应该正常打开和关闭。
下图显示了我要插入按钮的位置。
http://img193.imageshack.us/img193/2060/expandablelistviewbutto.png
答案 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可以执行与标准相同的操作。只是无法判断性能是否受损,但没有发现任何明显的问题。