【问题标题】:need help to custom expandableListView需要帮助自定义 expandableListView
【发布时间】:2013-09-13 07:21:55
【问题描述】:

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

【问题讨论】:

    标签: android expandablelistview


    【解决方案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

    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);
          }
       }
    }
    

    【讨论】:

    • 这个解决方案的一个小问题是即使group没有孩子,也会出现指示groupview状态(扩展与否)的灰色小三角形。我错了吗?
    • 您需要在自定义适配器的 getGroupView() 方法中修复它。自定义列表适配器的主要“想法”是您可以完全控制列表的外观 - 由于数据而自定义布局。
    • 谢谢大家的帮助,很有帮助,我试试这个方法。:)
    • @Sajmon 我应该在 getChildView 中为没有孩子的组返回 null 吗?
    • @Charlesjean 没有。这里有时会出现 NullPointerEpxection。不要尝试。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
       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。

      【讨论】:

        猜你喜欢
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 2010-09-16
        • 2012-02-16
        • 2014-08-15
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多