2011-03-03 130 views
3

我想写一个简单的例子,通过网络拉动外部数据,并通过ExpandableListAdapter填充ExpandableListView。我已经尝试了几个例子,并且几乎失去了。我熟悉ArrayAdapter课程,但看起来ExpandableListAdapter是不同的。这是我当前的应用程序代码,该代码显示什么:似乎无法找出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_width="fill_parent" 
     android:layout_height="fill_parent"> 

    <ExpandableListView android:id="@+id/android:list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

    <TextView android:id="@+id/android:empty" 
      android:text="EMPTY! DOOM!" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
</LinearLayout> 

R.layout.group_item:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    <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_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

    <ImageView android:id="@+id/child_item_icon" 
      android:layout_width="48px" android:layout_height="48px"/> 

    <TextView android:id="@+id/child_item_title"/> 
</LinearLayout> 

我,当然,我看到“空的! DOOM!“而不是我在我的活动中添加的列表项目。我在做什么错了?

此外,SimpleExpandableListAdapter似乎应该使事情变得简单,但我完全无法弄清楚它是如何工作的或如何使用它。任何人都可以帮我弄明白这一点吗?

回答

0

本周我有两个项目试图使用“fill_parent”在同一时间和在同一空间。这可能是你的名单被推到我看你在group_list布局中有一个类似的设置,希望对隐形列表有帮助

+0

已将该布局中的所有内容更改为“match_parent”。依然没有。 – 2011-03-03 23:37:33

+0

我不得不改变wrap_content项目,推动我的列表的方式。但是,如果getView()没有被调用,听起来像getGroupCount没有被调用或返回0. – 2011-03-04 05:48:38

+0

这部分看起来不正确,但我没有看到你在哪里使用组。您正在添加儿童项目,但您要添加小组,还是小组内的孩子? \ n this.groups = new ArrayList ();群组=新群组(“$ 1”,“颜色”);儿童孩子=新孩子(“$ 2”,“红”); 。groups.getChildren()添加(子); this.adapter = new MyExpandableListAdapter(this,groups); – 2011-03-04 15:42:00

0

如何将LinearLayout更改为在你的group_list.xml中有一个垂直方向?

它与ExpandableListActivity文档中给出的布局不完全匹配。

您还可以在像getView()方法这样的地方设置断点并查看它是否被调用。

+0

编辑我的布局,仍然没有。断点也不会被触发。 :( – 2011-03-03 23:33:29