• Android版手风琴(ExpandableListView)


    先看效果,过瘾一番。

     

     源码下载:https://files.cnblogs.com/salam/WidgetDemo.rar

      

      ExpandableListView是Android中的手风琴,本人感觉效果相当棒。

      一、ExpandableListView介绍

        一个垂直滚动的显示两个级别(Child,Group)列表项的视图,列表项来自ExpandableListAdapter 。组可以单独展开。

      1.重要方法

          expandGroup(int groupPos) :在分组列表视图中展开一组,

          setSelectedGroup(int groupPosition) :设置选择指定的组。

          setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。

          getPackedPositionGroup(long packedPosition) :返回所选择的组

          getPackedPositionForChild(int groupPosition, int childPosition) :返回所选择的子项

          getPackedPositionType(long packedPosition) :返回所选择项的类型(Child,Group)

          isGroupExpanded(int groupPosition) :判断此组是否展开

      2.代码:

    ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo)item.getMenuInfo();
      String title=((TextView)menuInfo.targetView).getText().toString();
      int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);
      
      if (type==ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
      int groupPos =ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
      int childPos =ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);

    二、ExpandableListAdapter

        一个接口,将基础数据链接到一个ExpandableListView。此接口的实施将提供访问Child的数据(由组分类),并实例化的Child和Group。

      1.重要方法

        getChildId(int groupPosition, int childPosition) 获取与在给定组给予孩子相关的数据。

        getChildrenCount(int groupPosition) 返回在指定Group的Child数目。

      2.代码

     public class MyExpandableListAdapter extends BaseExpandableListAdapter {
             // Sample data set.  children[i] contains the children (String[]) for groups[i].
             public String[] groups = { "我的好友", "新疆同学", "亲戚", "同事" };
             public String[][] children = {
                     { "胡算林", "张俊峰", "王志军", "二人" },
                     { "李秀婷", "蔡乔", "别高", "余音" },
                     { "摊派新", "张爱明" },
                     { "马超", "司道光" }
             };
            
             public Object getChild(int groupPosition, int childPosition) {
                 return children[groupPosition][childPosition];
             }

             public long getChildId(int groupPosition, int childPosition) {
                 return childPosition;
             }

             public int getChildrenCount(int groupPosition) {
                 return children[groupPosition].length;
             }

             public TextView getGenericView() {
                 // Layout parameters for the ExpandableListView
                 AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                         ViewGroup.LayoutParams.MATCH_PARENT, 64);

                 TextView textView = new TextView(ExpandableListDemo.this);
                 textView.setLayoutParams(lp);
                 // Center the text vertically
                 textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                 // Set the text starting position
                 textView.setPadding(36, 0, 0, 0);
                 return textView;
             }
            
             public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                     View convertView, ViewGroup parent) {
                 TextView textView = getGenericView();
                 textView.setText(getChild(groupPosition, childPosition).toString());
                 return textView;
             }

             public Object getGroup(int groupPosition) {
                 return groups[groupPosition];
             }

             public int getGroupCount() {
                 return groups.length;
             }

             public long getGroupId(int groupPosition) {
                 return groupPosition;
             }

             public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                     ViewGroup parent) {
                 TextView textView = getGenericView();
                 textView.setText(getGroup(groupPosition).toString());
                 return textView;
             }

             public boolean isChildSelectable(int groupPosition, int childPosition) {
                 return true;
             }

             public boolean hasStableIds() {
                 return true;
             }

         }

  • 相关阅读:
    PreferenceScreen 偏好显示类 的使用
    Android实战技巧:如何在ScrollView中嵌套ListView
    android onActivityResult不执行问题
    java zip解压中文乱码问题
    RandomAccessFile读取大文件时效率很低,现进行改进---BufferedRandomAccessFile
    HTTP RANGE(多线程下载相关)
    Android实现ListView异步加载图片
    自己调用webservice方法总结(带请求头SoapHeader)
    Android将程序崩溃信息保存本地文件
    Android的intent之间复杂参数的传递
  • 原文地址:https://www.cnblogs.com/salam/p/1844392.html
Copyright © 2020-2023  润新知