0

我是 android 新手,我想实现如下图所示的 ListView ExpandableListView。似乎expandableListView 可以满足我的要求,但我想要的是只有Item 4孩子并且可以展开,“项目1”只是用户可以点击的选项,不能展开。我阅读了 Expandable List View 的文档,并不清楚如何实现这一点。任何人都可以就实施这个提出一些建议吗?太感谢了

4

3 回答 3

1

但我想要的是只有第 4 项有孩子并且可以扩展

如果 Item 没有子项,则不会扩展。你可以像这样想象:

public class Item {

   private String title;
   private List<Option> children; // if size = 0 won't be expanded
}

这是本机行为,ExpandableListView因此,如果任何 Item 没有子项,则隐式不会扩展,但您需要为组 (Items) 和子项 (Options) 设置 OnClickListener:

public boolean onChildClick(ExpandableListView parent, View row, 
                           int groupPosition, int childPosition, long id) {

   // callback method after click for Options
   return false;
}


public boolean onGroupClick(ExpandableListView parent, View row, 
                             int groupPosition, long id) {

   /** if you are using BaseAdapter subclass implementation **/

   adapter.getGroup(groupPosition)).getChildren() == null) {
      // item doesn't have children
   }
   else {
      // has children
   }

通常,如果您想更好地控制您的 ListView,我非常建议您在您的情况下实现自己的 ListAdapter 子类,您可以使用BaseExpandableListAdapter

列表的外观只是关于正确样式布局的问题,例如删除组指示器

android:groupIndicator="@null"

更新:

@Roberto Lombardini 提到的问题:

这个解决方案的一个小问题是,即使组没有孩子,也会出现指示组视图状态(扩展与否)的灰色小三角形。我错了吗?

如果您只想为带有子项的项目设置灰色三角形,则需要在您的自定义适配器中修复它getGroupView()

public View getGroupView(int groupPosition, boolean isExpanded, 
                         View convertView, ViewGroup parent) {

   // inflating View etc.

   Item item = items.get(groupPosition);
   if (item != null) {

      // if Item has children
      if (item.getChildren() != null && !item.getChildren().isEmpty()) {

         // set children indicator to VISIBLE
         imageView.setVisibility(ImageView.VISIBLE);
      }
      // if Item doesn't have children
      else {
         // set children indicator to GONE
         imageView.setVisibility(ImageView.GONE);
      }
   }
}
于 2013-09-13T07:26:45.443 回答
0

尝试实现一些自定义适配器,我认为可能是做你需要的更好的方法

于 2013-09-13T07:27:57.417 回答
0
 lv.setOnGroupClickListener(new OnGroupClickListener() {
     public boolean onGroupClick(ExpandableListView parent, View v, int position, long id) {
         switch (position) {
             case 0: return true;
             case 2: return true; // returning true wont expand 
             default:
                 return false;// if you return false then only that position will be expanded
             }
         }
     }
); 

只需在要扩展的父位置和不想扩展的父位置上返回 false 即可返回 true。

于 2014-12-24T09:45:37.787 回答