ExpandableListView

ExpandableListView的例子

1. 定义groupItem和chidrenItem的layout,略;

2. 实现继承BaseExpandableListAdapter的类,如下:

public class MyExpandableListViewAdapter extends BaseExpandableListAdapter
{
    private String[] mGroupTypes = new String[] { "好友", "陌生人", "黑名单" };
    private String[][] mGroupMembers = new String[][] { { "好友一", "好友二", "好友三", "好友四", "好友五" }, { "陌生人一", "陌生人二", "陌生人三", "陌生人四", "陌生人五", "陌生人六" },
            { "黑名单一", "黑名单二", "黑名单三", "黑名四" } };
    private LayoutInflater mLayoutInflater;
    private OnChildItemClickListener mOnChildItemClickListener;

    public MyExpandableListViewAdapter(Context context)
    {
        mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

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

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

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

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

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
    {
        GroupViewHolder groupViewHolder;
        if (convertView == null)
        {
            groupViewHolder = new GroupViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.groupitem, null);
            groupViewHolder.mGroupInfo = (TextView) convertView.findViewById(R.id.expandablelistview_groupitem_info);
            groupViewHolder.mGroupIcon = (ImageView) convertView.findViewById(R.id.expandablelistview_groupitem_icon);
            convertView.setTag(groupViewHolder);
        }
        else
        {
            groupViewHolder = (GroupViewHolder) convertView.getTag();
        }

        if (isExpanded)
            groupViewHolder.mGroupIcon.setImageResource(R.drawable.ic_uparrows);
        else
            groupViewHolder.mGroupIcon.setImageResource(R.drawable.ic_downarrows);
        groupViewHolder.mGroupInfo.setText(mGroupTypes[groupPosition]);
        return convertView;
    }

    private final class GroupViewHolder
    {
        TextView mGroupInfo;
        ImageView mGroupIcon;
    }

    @Override
    public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
    {
        ChildViewHolder viewHolder;
        if (convertView == null)
        {
            viewHolder = new ChildViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.childitem, null);
            viewHolder.mChildInfoItem = (RelativeLayout) convertView.findViewById(R.id.paylist_item);
            viewHolder.mChildItemInfo = (TextView) convertView.findViewById(R.id.paylist_item_goldtv);
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder = (ChildViewHolder) convertView.getTag();
        }

        viewHolder.mChildItemInfo.setText(mGroupMembers[groupPosition][childPosition]);
        viewHolder.mChildInfoItem.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                mOnChildItemClickListener.onChildItemClicked(groupPosition, childPosition);
            }
        });
        return convertView;
    }

    private final class ChildViewHolder
    {
        RelativeLayout mChildInfoItem;
        TextView mChildItemInfo;
    }

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

    public interface OnChildItemClickListener
    {
        public void onChildItemClicked(int groupPosition, int childPosition);
    }

    public void setOnChildItemClickListener(OnChildItemClickListener onChildItemClickListener)
    {
        mOnChildItemClickListener = onChildItemClickListener;
    }
}

3. Activity中使用该适配器:

public class MainActivity extends Activity implements OnGroupExpandListener, OnChildItemClickListener{
    private ExpandableListView mExpandableListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mExpandableListView = (ExpandableListView) findViewById(R.id.activity_main_expandablelistview);  
        mExpandableListView.setDivider(null);  
        mExpandableListView.setOnGroupExpandListener((OnGroupExpandListener) this);  
  
        MyExpandableListViewAdapter adapter = new MyExpandableListViewAdapter(this);  
        mExpandableListView.setAdapter(adapter);  
        adapter.setOnChildItemClickListener(this); 
    }

    @Override  
    public void onGroupExpand(int groupPosition)  
    {  
        for (int i = 0, count = mExpandableListView.getExpandableListAdapter().getGroupCount(); i < count; i++)  
        {  
            if (groupPosition != i)  
            {  
                // 关闭其他分组  
                mExpandableListView.collapseGroup(i);  
            }  
        }  
    }  
  
    @Override  
    public void onChildItemClicked(int groupPosition, int childPosition)  
    {  
        Toast.makeText(this, "点击了" + groupPosition + "下的" + childPosition, Toast.LENGTH_SHORT).show();  
    }
}

 

posted @ 2013-03-22 16:08  Fredric_2013  阅读(306)  评论(0编辑  收藏  举报