首先我们还是来看一些案例,还是拿搜狐新闻客户端,因为我天天上下班没事爱看这个东东,上班又没时间看新闻,上下班路途之余浏览下新闻打发时间嘛.
看这个效果挺棒吧,其实实现起来也不难,我简单说明下.
首先我们用到的控件是:ExpandableListView
布局文件:
MyexpandableListAdapter.java
- /***
- * 数据源
- *
- * @author Administrator
- *
- */
- class MyexpandableListAdapter extends BaseExpandableListAdapter {
- private Context context;
- private LayoutInflater inflater;
- public MyexpandableListAdapter(Context context) {
- this.context = context;
- inflater = LayoutInflater.from(context);
- }
- // 返回父列表个数
- @Override
- public int getGroupCount() {
- return groupList.size();
- }
- // 返回子列表个数
- @Override
- public int getChildrenCount(int groupPosition) {
- return childList.get(groupPosition).size();
- }
- @Override
- public Object getGroup(int groupPosition) {
- return groupList.get(groupPosition);
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- return childList.get(groupPosition).get(childPosition);
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- @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) {
- GroupHolder groupHolder = null;
- if (convertView == null) {
- groupHolder = new GroupHolder();
- convertView = inflater.inflate(R.layout.group, null);
- groupHolder.textView = (TextView) convertView
- .findViewById(R.id.group);
- groupHolder.imageView = (ImageView) convertView
- .findViewById(R.id.image);
- groupHolder.textView.setTextSize(15);
- convertView.setTag(groupHolder);
- } else {
- groupHolder = (GroupHolder) convertView.getTag();
- }
- groupHolder.textView.setText(getGroup(groupPosition).toString());
- if (isExpanded)// ture is Expanded or false is not isExpanded
- groupHolder.imageView.setImageResource(R.drawable.expanded);
- else
- groupHolder.imageView.setImageResource(R.drawable.collapse);
- return convertView;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- if (convertView == null) {
- convertView = inflater.inflate(R.layout.item, null);
- }
- TextView textView = (TextView) convertView.findViewById(R.id.item);
- textView.setTextSize(13);
- textView.setText(getChild(groupPosition, childPosition).toString());
- return convertView;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- }
- @Override
- public boolean onGroupClick(final ExpandableListView parent, final View v,
- int groupPosition, final long id) {
- return false;
- }
selector_group.xml
效果图:
效果虽然丑了点,不过就是这么回事,至于显示group的item,还是孩子的item,你可以随意定制.
不想敲的同学,可以下载源码,稍作调整.
源码下载
/********************************LIstView模拟ExpandableListView**************************************************************/
下面我们接着看一些案例:
其实就是:点击listview的一个item,展开其孩子,点击另一个item,打开其孩子,关闭之前那个孩子.
这个眨一看是ExpandableListView这个东东,可是本人比较笨戳,整了好久没有弄出来,最终放弃,google下,发现有人用listview来模拟实现,也就跟着做了下.
布局文件:(后面多个隐藏text.)
- /***
- * 数据源
- *
- * @author zhangjia
- *
- */
- class MyAdpter extends BaseAdapter {
- private Context context;
- private LayoutInflater inflater;
- private int change_index = -1;// 改变项
- public MyAdpter(Context context) {
- super();
- this.context = context;
- inflater = (LayoutInflater) context
- .getSystemService(context.LAYOUT_INFLATER_SERVICE);
- }
- @Override
- public int getCount() {
- return groupList.size();
- }
- @Override
- public Object getItem(int position) {
- return groupList.get(position);
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- GroupHolder groupHolder = null;
- if (convertView == null) {
- groupHolder = new GroupHolder();
- convertView = inflater.inflate(R.layout.group, null);
- groupHolder.textView = (TextView) convertView
- .findViewById(R.id.group);
- groupHolder.imageView = (ImageView) convertView
- .findViewById(R.id.image);
- groupHolder.hint_item = (TextView) convertView
- .findViewById(R.id.hint_item);
- convertView.setTag(groupHolder);
- } else {
- groupHolder = (GroupHolder) convertView.getTag();
- }
- groupHolder.textView.setText(groupList.get(position));
- groupHolder.hint_item.setText(childList.get(position));
- if (change_index == position)
- groupHolder.hint_item.setVisibility(View.VISIBLE);
- else
- groupHolder.hint_item.setVisibility(View.GONE);
- return convertView;
- }
- /***
- * 这个方法用于更改子item的状态
- */
- public void changeImageVisable(View view, int position) {
- // 隐藏提示
- if (change_index == position) {
- GroupHolder groupHolder = (GroupHolder) view.getTag();
- if (groupHolder.hint_item.getVisibility() == View.VISIBLE)
- groupHolder.hint_item.setVisibility(View.GONE);
- else
- groupHolder.hint_item.setVisibility(View.VISIBLE);
- } else {
- change_index = position;
- notifyDataSetChanged();// restart getview
- }
- }
- }
效果:
上面模拟显示的孩子是一个textview(缺点:隐藏textview显示时候点击会影响到其父控件,大家尝试一下,不过肯定有解决办法的.),
下面我来介绍下,如果孩子是listview应该怎么办.
首先配置文件:
- /***
- * InitData
- */
- void InitData() {
- groupList = new ArrayList();
- groupList.add("Ios");
- groupList.add("Android");
- groupList.add("Window");
- childList = new ArrayList();
- for (int i = 0; i
关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录