Android:ExpandableListView(拡張可能なListView)使用詳細;


まず効果を見ると、多くのappが似たような機能を使っていることがわかります.もし最もよく使われているのは私たちのQQチャットソフトであれば、友达のグループはExpandableListViewで実現することができます.
ExpandableListViewはListViewのサブクラスです.
ExpandableListViewとListViewの使い方は同じです.
同様にadapterを設定する必要があります.
唯一の違いは、ListViewがデータのセットを設定する必要があることです.一方、ExpandableListViewでは、グループビューとサブビューの2つのデータを設定する必要があります.
では、まずExpandAbleListAdapterについて説明します.
ListView Adapterより少し面倒です.
まず、グループビューのラベル総数、ID、コンテンツ、サブビューのラベル総数、ID、コンテンツを設定する必要があります.また、位置を指定する必要があります.
最後に、getGroup View()メソッドとgetChildView()メソッドでグループビューとサブビューを設定します.
方法が面倒だと感じているのではないでしょうか.でも、使うのも簡単です.
たとえば、getGroup Id()、getChildId()は、BaseAdapterのgetItemId()メソッドと同様に管理されません.
hasStableIds(),getGroupCount(),getGroup(),getChildrenCount(),getChild();この5つの方法はBaseAdapterのgetCount()の方法と差が少なく、固定的な書き方であり、非常に簡単である.
唯一のコードが多いgetGroup View()は、getChildView()とBaseAdapterのgetViewの使い方がそっくりです.
瞬間的に違和感があるのではないでしょうか.具体的なコードを見てみましょう.
class MyExpandableListAdapter extends BaseExpandableListAdapter {

        @Override
        //         
        public int getGroupCount() {
            return countryTypes.length;
        }

        @Override
        //        ID
        public long getGroupId(int groupPosition) {
            return 0;
        }

        @Override
        //         
        public Object getGroup(int groupPosition) {
            return countryTypes[groupPosition];
        }

        @Override
        //          
        public int getChildrenCount(int groupPosition) {
            return childNames[groupPosition].length;
        }

        @Override
        //        ID
        public long getChildId(int groupPosition, int childPosition) {
            return 0;
        }

        @Override
        //                
        public Object getChild(int groupPosition, int childPosition) {
            return childNames[groupPosition][childPosition];
        }

        @Override
        //          
        public boolean hasStableIds() {
            return true;
        }

        @Override
        //          
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

            GroupHolder groupHolder;
            if (convertView == null) {
                convertView = View.inflate(context,R.layout.group_item,null);
                groupHolder = new GroupHolder();
                groupHolder.tv = (TextView)convertView.findViewById(R.id.textview);
                groupHolder.iv= (ImageView) convertView.findViewById(R.id.imageview);
                convertView.setTag(groupHolder);
            } else {
                groupHolder = (GroupHolder)convertView.getTag();
            }

            if(isExpanded){
                //             
                groupHolder.tv.setText(getGroup(groupPosition).toString()+"  ------  ↓");
            }else {
                groupHolder.tv.setText(getGroup(groupPosition).toString()+"  ------  ↑");
            }
            return convertView;
        }

        @Override
        /**
         *                  
         *
         * @param groupPosition    
         * @param childPosition      
         * @param isLastChild               
         * @param convertView        (View)  
         * @param parent      (View)           
         */
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            ItemHolder itemHolder;
            if(convertView==null){
                convertView=View.inflate(context,R.layout.child_item,null);
                itemHolder=new ItemHolder();
                itemHolder.tv= (TextView) convertView.findViewById(R.id.textview);
                itemHolder.iv= (ImageView) convertView.findViewById(R.id.imageview);
                convertView.setTag(itemHolder);
            }else {
                itemHolder= (ItemHolder) convertView.getTag();
            }

            itemHolder.tv.setText(getChild(groupPosition,childPosition).toString());
            itemHolder.iv.setBackgroundResource(childImageIds[groupPosition][childPosition]);
            return convertView;
        }

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

次に、ExpandableListViewにadapterを直接設定すればいいです.
elv= (ExpandableListView) findViewById(R.id.expandable_listview);
        adapter = new MyExpandableListAdapter();
        elv.setAdapter(adapter);

ExpandableListViewには2つのビューがあるので、エントリクリックイベントも2つあります.それぞれ、グループビューのitemクリックイベント、サブビューのitemクリックイベントです
//    item    
        elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                ToastUtils.showToast(context,countryTypes[groupPosition]);
                return false;
            }
        });

        //    item    
        elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {
                ToastUtils.showToast(context,childNames[groupPosition][childPosition]);
                return false;
            }
        });

クリックしてリンクを開けて無料でソースをダウンロードします