ExpandableListView事件回调
2016-05-11 10:39
567 查看
需求 模拟childView的点击事件 当点击某个组时它的第一个childItem需要被点击
需要模拟点击事件 须知点击事件流程
点击事件流程
基础流程
onTouchUp(触摸弹起事件)——》PerformClick.run ——》performItemClick ——》handleItemClick
groupClickEvent 基础流程——》onGroupClick ——》isExpanded ——》?collapseGroup:expandGroup
注意:当onGroupClick 返回truecollapseGroup或expandGroup将不会被回调 继当里点击了某个group它不会自动展开或关闭该groupf
childClickEvent 基础流程
例如:4个组列表没个组4个子列表 页面加载时
需要显示地一组的第一个 通过performItemClick
(null,0,0)展开地一个列表 通过performItemClick
(null,1,0) 加载第一项
需要显示地三组的第一个 通过performItemClick
(null,3,0)展开地一个列表 通过performItemClick
(null,4,0) 加载第一项
需要显示地三组的第三个 通过performItemClick
(null,3,0)展开地一个列表 通过performItemClick
(null,6,0) 加载第一项
公示 childPosition=groupPosition+显示第几个
显示第三组下第三项 时 加载子列表的应该是performItemClick
(null,6,0) 如果写成performItemClick
(null,8,0)会怎样了?
第三组下只有四项 显示最后一个是performItemClick
(null,7,0) 8大于7 这时将会调用groupClick position为8 由于只有4组 8超出了所有把position修改成3 所以将展开第4组
展开地3组时 执行performItemClick
(null,1,0) 会展开第二组
下面两组代码都是显示地0组地一项
下面的为折叠第0组
group的点击事件 当某个group被点击时被回调
定义
实现
group展开时的回调事件 当某个group展开时 它被回调
实现
上面的实现效率不咋样可以优化 使用一变量记录上一次展开的groupPosition 当展开列表时判断上次展开列表是否为-1不为-1折叠该组
group折叠回调事件 当某个group折叠时被回调
当设置了onItemSelectedListener 当group或child点击后 onGroupClickListener 或 onChildClickListener都没有得到处理时才会回调它
setSelectedGroup 显示到指定组 setSelectedChild 显示到指定组下的某的子项 它们都是调用AbsListView的setSelection方法进行定位
child点击事件 当child被点击时回调
如
需要模拟点击事件 须知点击事件流程
点击事件流程
基础流程
onTouchUp(触摸弹起事件)——》PerformClick.run ——》performItemClick ——》handleItemClick
groupClickEvent 基础流程——》onGroupClick ——》isExpanded ——》?collapseGroup:expandGroup
注意:当onGroupClick 返回truecollapseGroup或expandGroup将不会被回调 继当里点击了某个group它不会自动展开或关闭该groupf
childClickEvent 基础流程
例如:4个组列表没个组4个子列表 页面加载时
需要显示地一组的第一个 通过performItemClick
(null,0,0)展开地一个列表 通过performItemClick
(null,1,0) 加载第一项
需要显示地三组的第一个 通过performItemClick
(null,3,0)展开地一个列表 通过performItemClick
(null,4,0) 加载第一项
需要显示地三组的第三个 通过performItemClick
(null,3,0)展开地一个列表 通过performItemClick
(null,6,0) 加载第一项
公示 childPosition=groupPosition+显示第几个
显示第三组下第三项 时 加载子列表的应该是performItemClick
(null,6,0) 如果写成performItemClick
(null,8,0)会怎样了?
第三组下只有四项 显示最后一个是performItemClick
(null,7,0) 8大于7 这时将会调用groupClick position为8 由于只有4组 8超出了所有把position修改成3 所以将展开第4组
展开地3组时 执行performItemClick
(null,1,0) 会展开第二组
下面两组代码都是显示地0组地一项
mElvLeftMenus.performItemClick(null,0,0); mElvLeftMenus.performItemClick(null,1,0);
mElvLeftMenus.expandGroup(0); mElvLeftMenus.performItemClick(null,1,0);
下面的为折叠第0组
mElvLeftMenus.collapseGroup(0);
group的点击事件 当某个group被点击时被回调
定义
public void setOnGroupClickListener(OnGroupClickListener onGroupClickListener) { mOnGroupClickListener = onGroupClickListener; }
/** * Interface definition for a callback to be invoked when a group in this * expandable list has been clicked. */ public interface OnGroupClickListener { /** * Callback method to be invoked when a group in this expandable list has * been clicked. * * @param parent The ExpandableListConnector where the click happened * @param v The view within the expandable list/ListView that was clicked * @param groupPosition The group position that was clicked * @param id The row id of the group that was clicked * @return True if the click was handled */ boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id); }
实现
ExpandableListView.OnGroupClickListener groupListener=new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { String groupName=String.valueOf(mLeftMenuAdapter.getGroup(groupPosition)); ToastManager.debug(groupName, false); if(mLeftMenuSlectGroupPosition == groupPosition){ //重复点击 return false; } mLeftMenuSlectGroupPosition = groupPosition; String[] child = mLeftMenuAdapter.getChild(groupPosition); if (child==null || child.length==0) { BaseActivity.this.onLeftMenuGroupClick(parent, v, groupPosition, groupName); return false; }else { // boolean isGroupExpanded=mElvLeftMenus.isGroupExpanded(groupPosition); // if(isGroupExpanded){ // //这里不可能进来 能进这里条件mLeftMenuSlectGroupPosition == groupPosition过不了 // return false; // } mUiHandler.postDelayed(new Runnable() { @Override public void run() { int childPosition=mLeftMenuSlectGroupPosition+1; mElvLeftMenus.performItemClick(null,childPosition,mLeftMenuAdapter.getChildId(mLeftMenuSlectGroupPosition,childPosition)); } },100); } return false; } };
group展开时的回调事件 当某个group展开时 它被回调
public void setOnGroupExpandListener(OnGroupExpandListener onGroupExpandListener) { mOnGroupExpandListener = onGroupExpandListener; }
实现
mElvLeftMenus.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { int groupCount = mLeftMenuAdapter.getGroupCount(); for (int index = 0; index <groupCount; index++) { if (groupPosition != index) { mElvLeftMenus.collapseGroup(index); } } } });
上面的实现效率不咋样可以优化 使用一变量记录上一次展开的groupPosition 当展开列表时判断上次展开列表是否为-1不为-1折叠该组
group折叠回调事件 当某个group折叠时被回调
public void setOnGroupCollapseListener(OnGroupCollapseListener onGroupCollapseListener) { mOnGroupCollapseListener = onGroupCollapseListener; }
当设置了onItemSelectedListener 当group或child点击后 onGroupClickListener 或 onChildClickListener都没有得到处理时才会回调它
/** * Register a callback to be invoked when an item in this AdapterView has * been selected. * * @param listener The callback that will run */ public void setOnItemSelectedListener(@Nullable OnItemSelectedListener listener) { mOnItemSelectedListener = listener; }
setSelectedGroup 显示到指定组 setSelectedChild 显示到指定组下的某的子项 它们都是调用AbsListView的setSelection方法进行定位
child点击事件 当child被点击时回调
如
ExpandableListView.OnChildClickListener childListener=new ExpandableListView.OnChildClickListener(){ @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { if(v!=null && mLeftMenuSlectGroupPosition ==groupPosition && mLeftMenuSlectChildPosition ==childPosition){ //当v为null时是点击了group 这样的画groupPosition和childPosition有可能相同 ToastManager.debug("点击的为当前页面,不做处理", false); return true; } mLeftMenuSlectGroupPosition =groupPosition; mLeftMenuSlectChildPosition =childPosition; String childName=String.valueOf(mLeftMenuAdapter.getChild(groupPosition,childPosition)); ToastManager.debug(childName, false); BaseActivity.this.onLeftMenuChildClick(parent, v, groupPosition,childPosition, childName); return true; } };
相关文章推荐
- Android常用第三方框架
- matlab函数 size()函数和waterfal()l函数,三维图形,矩阵
- POJ2255-递归
- apache flume agent安装
- 160510、jQuery给input绑定回车事件
- springside4技术选型
- ViewPager+PagerAdapter实现导航
- Java Web中的EL(表达式语言)详解
- 【Lua】windows下安装和使用LuaJIT步骤
- MinGW安装和使用
- 剑指offer之面试题22栈的压入、弹出序列
- 牛课网 | 选择
- NYOJ 42 一笔画问题
- Excel 集計機能
- 引用
- ElasticSearch之初识
- leetcode笔记—Reorder List
- html5 record 修改采样率导致声音无法播放解决方案
- Apache POI系列教程2-1:poi入门教程--excel百万数据的导入导出
- 算法#05--神作:深入浅出傅里叶变换