博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExpandableListView
阅读量:7051 次
发布时间:2019-06-28

本文共 5637 字,大约阅读时间需要 18 分钟。

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();      }}

 

转载于:https://www.cnblogs.com/Fredric-2013/archive/2013/03/22/4357481.html

你可能感兴趣的文章
webpack4配置react(开发环境)
查看>>
面向对象设计的设计模式(二):结构型模式(附 Demo & UML类图)
查看>>
Hack 苹果系统 Api 实现 iOS TableViewCell 侧滑方案
查看>>
用 Python 做一个 H5 游戏机器人
查看>>
Kali Linux渗透测试实战 第一章
查看>>
倒计时获取验证码
查看>>
我眼中的Android Framework
查看>>
网易云信融合CDN方案及实践
查看>>
Flutter初探 上下拉分页请求+计算器实现
查看>>
TensorFlow入门教程
查看>>
HTML5 新特性
查看>>
你知道JavaScript中的结果值是什么吗?
查看>>
python将指定点云文件(asc)转换为PCD格式
查看>>
切图崽的自我修养-[ES6] 异步函数管理方案浅析
查看>>
关于性能优化的那点事——函数节流
查看>>
NPM简单入门
查看>>
Linux Namespace系列(05):pid namespace (CLONE_NEWPID)
查看>>
爬虫学习之基于Scrapy的网络爬虫
查看>>
基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)
查看>>
Docker利用Jexus独立版部署MVC Demo
查看>>