需要帮助自定义expandableListView

时间:2013-09-13 07:21:56

标签: android expandablelistview

我是android的新手,我想实现像ExpandableListView下面的图像一样的ListView。似乎expandableListView可能符合我的要求,但我想要的只是Item 4有孩子并且可以扩展,'Item 1'只是一个用户可以点击的选项,并且无法展开。我阅读了可扩展列表视图的文档,并不清楚如何实现它。有人可以提出一些实施这个建议吗?非常感谢你

3 个答案:

答案 0 :(得分:1)

  

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

如果物品没有孩子,则不会被遗弃。您可以像这样形象:

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

List的外观只是关于正确样式布局的问题,例如用

删除组指示符
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);
      }
   }
}

答案 1 :(得分:0)

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

答案 2 :(得分: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。