似乎无法弄清楚 ExpandableListAdapter
Posted
技术标签:
【中文标题】似乎无法弄清楚 ExpandableListAdapter【英文标题】:Can't seem to figure out ExpandableListAdapter 【发布时间】:2011-07-08 10:28:38 【问题描述】:我正在尝试编写一个简单的示例,该示例通过网络提取外部数据并通过ExpandableListAdapter
填充ExpandableListView
。我已经尝试了几个例子并且几乎迷失了。我熟悉使用 ArrayAdapter
类,但似乎 ExpandableListAdapter
有很大不同。这是我当前不显示任何内容的应用程序代码:
MyExpandableListAdapter:
public class MyExpandableListAdapter extends BaseExpandableListAdapter
public static class GroupHolder
TextView title;
public static class ChildHolder
TextView title;
ImageView icon;
// groups.getChildren() returns the children
private List<Group> groups;
private Context context;
private LayoutInflater inflater;
public MyExpandableListAdapter(Context context, List<Group> groups)
this.context = context;
this.groups = groups;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
public boolean hasStableIds()
return true;
public Object getGroup(int groupPosition)
return groups.get(groupPosition);
public int getGroupCount()
return groups.size();
public long getGroupId(int groupPosition)
return groupPosition;
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
GroupHolder holder;
if (convertView != null)
holder = (GroupHolder)convertView.getTag();
else
convertView = inflater.inflate(R.layout.group_item, parent, false);
holder = new GroupHolder();
holder.title = (TextView) convertView.findViewById(R.id.group_item_title);
convertView.setTag(holder);
holder.title.setText(this.groups.get(groupPosition).getName());
return convertView;
public boolean isChildSelectable(int groupPosition, int childPosition)
return true;
public Object getChild(int groupPosition, int childPosition)
return groups.get(groupPosition).getChildren().get(childPosition);
public long getChildId(int groupPosition, int childPosition)
return childPosition;
public int getChildrenCount(int groupPosition)
return groups.get(groupPosition).getChildren().size();
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
ChildHolder holder;
if (convertView != null)
holder = (ChildHolder) convertView.getTag();
else
convertView = inflater.inflate(R.layout.child_item, parent, false);
holder = new ChildHolder();
holder.title = (TextView) convertView.findViewById(R.id.child_item_title);
holder.icon = (ImageView) convertView.findViewById(R.id.child_item_icon);
convertView.setTag(holder);
holder.title.setText(groups.get(groupPosition).getChildren().get(childPosition).getName());
// TODO add in image loading.
return convertView;
MyExpandableListActivity:
public class MyExpandableListActivity extends ExpandableListActivity
private List<Group> groups;
private ExpandableListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.group_list);
this.groups = new ArrayList<Group>();
Group group = new Group("$1", "Colors");
Child child = new Child("$2", "Red");
groups.getChildren().add(child);
this.adapter = new MyExpandableListAdapter(this, groups);
setListAdapter(this.adapter);
R.layout.group_list:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<ExpandableListView android:id="@+id/android:list"
android:layout_
android:layout_/>
<TextView android:id="@+id/android:empty"
android:text="EMPTY! DOOM!"
android:layout_
android:layout_/>
</LinearLayout>
R.layout.group_item:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextView android:id="@+id/group_item_title"/>
</LinearLayout>
R.layout.child_item:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="horizontal">
<ImageView android:id="@+id/child_item_icon"
android:layout_ android:layout_/>
<TextView android:id="@+id/child_item_title"/>
</LinearLayout>
当然,我看到的是“EMPTY!DOOM!”而不是我在活动中添加的列表项。我究竟做错了什么?
另外,SimpleExpandableListAdapter
似乎应该让事情变得简单,但我完全不知道它是如何工作的或如何使用它。谁能帮我解决这个问题?
【问题讨论】:
这能回答你的问题吗? How to write custom ExpandableListAdapter 【参考方案1】:这周我对两个项目在同一时间和同一空间中尝试使用“fill_parent”有所了解。您的列表可能被推到后面或屏幕外。我看到你的 group_list 布局中有一个类似的设置。希望对隐形列表有帮助。
【讨论】:
将该布局中的所有内容更改为match_parent
。还是什么都没有。
我不得不在将我的列表推开的项目上更改为 wrap_content。但是如果 getView() 没有被调用,听起来 getGroupCount 没有被调用或返回 0。
这部分对我来说不合适,但我看不出你在哪里使用组。您正在添加子项,但是您在哪里添加组或组内的子项? \n this.groups = new ArrayList如何在 group_list.xml 中将 LinearLayout 更改为垂直方向?
它与ExpandableListActivity 文档中给出的布局不太匹配。
您还可以在 getView() 方法等位置设置断点,并查看它是否被调用。
【讨论】:
编辑了我的布局,仍然没有。断点也永远不会触发。 :(以上是关于似乎无法弄清楚 ExpandableListAdapter的主要内容,如果未能解决你的问题,请参考以下文章