<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • 在android里用ExpandableListView實現二層和三層列表源碼

    [來源] 達內    [編輯] 達內   [時間]2012-11-13

    二層列表是直接用androidAPI中的ExpandableListView即可實現,三層列表其實是對二層列表的一個嵌套,實現起來會相對繁瑣

    二層列表是直接用androidAPI中的ExpandableListView即可實現,三層列表其實是對二層列表的一個嵌套,實現起來會相對繁瑣。

    部分代碼:

    SuperTreeViewAdapter.java

    public
    
     class SuperTreeViewAdapter extends
     BaseExpandableListAdapter {      static
     public
    
     class SuperTreeNode {         Object parent;         
    //二級樹形菜單的結構體
    
            List<TreeViewAdapter.TreeNode> childs = new
     ArrayList<TreeViewAdapter.TreeNode>();     }      private
     List<SuperTreeNode> superTreeNodes = new
    
     ArrayList<SuperTreeNode>();     private
     Context parentContext;     private
     OnChildClickListener stvClickEvent;//外部回調函數
    
        
        public
     SuperTreeViewAdapter(Context view,OnChildClickListener stvClickEvent) {         parentContext = view;         
    this
    
    .stvClickEvent=stvClickEvent;     }      public
     List<SuperTreeNode> GetTreeNode() {         return
    
    
     superTreeNodes;     }      public void
     UpdateTreeNode(List<SuperTreeNode> node) {         superTreeNodes =
     node;     }          
    
    public void
    
    
     RemoveAll()     {         superTreeNodes.clear();     }          public
     Object getChild(int
    
     groupPosition, int childPosition) {         
    return superTreeNodes.get(groupPosition).childs.get(childPosition);     }      
    public int
     getChildrenCount(
    
    int groupPosition) {         return
     superTreeNodes.get(groupPosition).childs.size();     }      public
     ExpandableListView getExpandableListView() {         AbsListView.LayoutParams lp = 
    new
    
     AbsListView.LayoutParams(                 ViewGroup.LayoutParams.FILL_PARENT, TreeViewAdapter.ItemHeight);         ExpandableListView superTreeView 
    = new
    
     ExpandableListView(parentContext);         superTreeView.setLayoutParams(lp);         
    return superTreeView;     }      /**
          * 三層樹結構中的第二層是一個ExpandableListView      */
        
        public View getChildView(int
     groupPosition, int childPosition,             
    boolean isLastChild, View convertView, ViewGroup parent) {         
    //
    
    
    
            final ExpandableListView treeView = getExpandableListView();         
    final TreeViewAdapter treeViewAdapter = new
     TreeViewAdapter(this.parentContext,0);         List
    <TreeNode> tmp = treeViewAdapter.getTreeNode();//
    臨時變量取得TreeViewAdapter的TreeNode集合,可為空        final
     TreeNode treeNode=
    
    (TreeNode) getChild(groupPosition, childPosition);         tmp.add(treeNode);         treeViewAdapter.updateTreeNode(tmp);         treeView.setAdapter(treeViewAdapter);                  
    //
    
    關鍵點:取得選中的二級樹形菜單的父子節點,結果返回給外部回調函數
    
            treeView.setOnChildClickListener(this.stvClickEvent);                  
    /**
              * 關鍵點:第二級菜單展開時通過取得節點數來設置第三級菜單的大小          */
             treeView.setOnGroupExpandListener(
    
    new OnGroupExpandListener() {             @Override             
    public void
     onGroupExpand(int
     groupPosition) {                                  AbsListView.LayoutParams lp 
    
    = new
     AbsListView.LayoutParams(                         ViewGroup.LayoutParams.FILL_PARENT,                         (treeNode.childs.size()
    
    +1)*TreeViewAdapter.ItemHeight + 10);                 treeView.setLayoutParams(lp);             }         });                  
    /**
    
              * 第二級菜單回收時設置為標準Item大小          */
             treeView.setOnGroupCollapseListener(new
     OnGroupCollapseListener() {             @Override             public
     void onGroupCollapse(int
    
    
     groupPosition) {                                  AbsListView.LayoutParams lp = new
     AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,                         TreeViewAdapter.ItemHeight);                 treeView.setLayoutParams(lp);             }         });         treeView.setPadding(TreeViewAdapter.PaddingLeft
    *2, 0, 0, 0);         return
     treeView;     }      
    
    /**      * 三級樹結構中的首層是TextView,用于作為title      
    */
    
        public View getGroupView(int
     groupPosition, boolean
     isExpanded,             View convertView, ViewGroup parent) {         TextView textView 
    
    = TreeViewAdapter.getTextView(this
    .parentContext);         textView.setText(getGroup(groupPosition).toString());         textView.setPadding(TreeViewAdapter.PaddingLeft*2, 0, 0, 0);         
    return
    
     textView;     }      public
     long getChildId(int
     groupPosition, 
    
    int childPosition) {         return
     childPosition;     }      public
     Object getGroup(int groupPosition) {         
    return
    
     superTreeNodes.get(groupPosition).parent;     }      public
     int getGroupCount() {         
    
    
    return superTreeNodes.size();     }      public
     long getGroupId(int
    
    
     groupPosition) {         return groupPosition;     }      
    public boolean
     isChildSelectable(int groupPosition, int
     childPosition) {         
    
    return true
    ;     }      public
     boolean
    
     hasStableIds() {         return
     true;     } }

    ExpandableListViewActivity.java

    
    List<SuperTreeViewAdapter.SuperTreeNode> superNodeTree = superAdapter.GetTreeNode();                 
    forint
     i = 0; i < parent.length; i++
    
    ) {                     SuperTreeViewAdapter.SuperTreeNode superNode = new
     SuperTreeViewAdapter.SuperTreeNode();                     superNode.parent = parent[i];     
    forint j = 0; j < child_grandchild.length; j++
    ) {                          TreeViewAdapter.TreeNode node = new
     TreeViewAdapter.TreeNode();                          node.parent = child_grandchild[j][0][0];                         
    forint k = 0; k < child_grandchild[j][1].length; k++
    ) {                           node.childs.add(child_grandchild[j][1][k]);                         }                            superNode.childs.add(node);                        }                       superNodeTree.add(superNode);                   }           superAdapter.UpdateTreeNode(superNodeTree);                  expandableListView.setAdapter(superAdapter);     

    main.xml

    
    <LinearLayout         android:id="@+id/linearLayout1"
             android:layout_width="match_parent"         android:layout_height
    ="wrap_content"
    
             android:layout_gravity="center"         android:gravity
    ="center" >
    
            <Button             android:id="@+id/button1"
                 android:layout_width="100dip"             android:layout_height
    ="wrap_content"
    
                 android:text
    ="二層結構" />
    
            <Button             android:id="@+id/button2"
                 android:layout_width="100dip"             android:layout_height
    ="wrap_content"
    
                 android:text
    ="三層結構" />
        </LinearLayout>
    
        <ExpandableListView         android:id="@+id/expandablelistview"
             android:layout_width="fill_parent"         android:layout_height
    ="fill_parent"
            >
        </ExpandableListView>


    效果圖 :

    三層列表

     

    二層列表

    資源下載

    ?