<li id="34b3z"></li>
    <nav id="34b3z"></nav>
  1. <wbr id="34b3z"><legend id="34b3z"></legend></wbr>
    
    

        1. <form id="34b3z"></form>
          <sub id="34b3z"><table id="34b3z"><th id="34b3z"></th></table></sub>

          在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>


          效果圖 :

          三層列表

           

          二層列表

          資源下載

          ?