通过标记实现对ExpandableListView的子条目长按点击
来源:互联网 发布:数据口径是什么 编辑:程序博客网 时间:2024/05/23 02:18
项目开发中ExpandableListView的功能非常强大,能简单的实现很多ListView实现起来很复杂的工作,监听事件的方法如下图:
但是也有一个缺点,就是ExpandableListView实现Group条目下的child子条目的长按点击事件操作算是十分不容易,因为ExpandableListView的点击事件是Group和Child共享一个长按点击接监听方法;所以有时为了拿到Child子条目的数据,必须要拿到Group条目对应的groupPosition。但是ExpandableListView实现长按监听的参数只有一个position位置信息,显得是尬;ExpandableListView的长按监听方法如下:
<span style="font-size:14px;"> @Override protected void initListenner() { mConversationLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { return false; } }); }</span>
所以,为了解决上诉问题。我想到了一种简单的方法,那就是LisetView和ViewHolder那样实现打标记的方法setTag()和getTag()从而拿到对方的信息;
注意:这里对应的R.id.iv_touxiang和R.id.iv_online必须是资源空间ID,道理如同LisetView和ViewHolder相互捆绑一样。这样应该很容易理解吧。
GroupView代码如下:
<span style="font-size:14px;"> @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(mActivity, R.layout.list_contact_group, null); } ImageView iv_indicator = (ImageView) convertView.findViewById(R.id.iv_indicator); TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group); TextView tv_count = (TextView) convertView.findViewById(R.id.tv_count); iv_indicator.setSelected(isExpanded); tv_group.setText(getRosterGroup(groupPosition).getName()); tv_count.setText(getRosterEntries(groupPosition).size() + ""); //通过打标记的方法来获取groupPosition和childPosition convertView.setTag(R.id.iv_touxiang, groupPosition); convertView.setTag(R.id.iv_online, -1); return convertView; }</span>
ChildView代码如下:
<span style="font-size:14px;"> @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(mActivity, R.layout.list_contact_child, null); } TextView tv_name = (TextView) convertView.findViewById(R.id.tv_name); RosterEntry rosterEntry = getRosterEntries(groupPosition).get(childPosition); tv_name.setText(rosterEntry.getName() + "====" + rosterEntry.getUser()); //通过打标记的方法来获取groupPosition和childPosition convertView.setTag(R.id.iv_touxiang, groupPosition); convertView.setTag(R.id.iv_online, childPosition); return convertView; }</span>最后,当我们长按子条目师,触发长按事件,我们就可以通过getTag()方法拿到当前条目的groupPosition和childPosition了
代码如下:
<span style="font-size:14px;"> @Override protected void initListenner() { mConversationLv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { int groupPosition = (Integer) view.getTag(R.id.iv_touxiang); int childPosition = (Integer) view.getTag(R.id.iv_online); LogUtils.d("groupPosition=" + groupPosition + "===========childPosition=" + childPosition); return false; } }); }</span>
下面附输出日志
03-23 03:12:50.990 15853-15853/? D/LogUtils: groupPosition=0===========childPosition=1
0 0
- 通过标记实现对ExpandableListView的子条目长按点击
- ListView中的条目长按点击事件的实现
- 实现ExpandableListView 二级列表,点击二级条目状态的改变
- Android学习笔记:如何对ExpandableListView进行精确的点击或长按控制
- ExpandableListView 长按实现
- 安卓ExpandableListView长按监听判断点击的item属于哪个group(群组)和child(子项)
- ExpandableListView的长按点击弹出上下文菜单方法
- 【实战问题】ExpandableListView条目长按事件的position和其他groupPosition的区别。
- RecyclerView条目点击和长按
- 完美解决ExpandableListView长按点击事件
- 【ExpandableListView】---2 长按和点击处理
- ExpandableListView长按监听实现
- RecyclerView 初次体验,实现增加删除条目及item长按和点击事件
- ViewPager:真正实现图片的无限轮播、自定义指示点和条目点击事件(支持长按暂停滚动)
- ExpandableListView长按确定父项与子项
- RecycleView条目点击事件的实现方法
- expandablelistview的子控件及其中控件的点击事件
- ExpandableListView 长按事件
- 滑动窗口基本原理
- JQuery 常用积累(二)Pagination 分页组件
- Mac电脑上怎样设置host
- UITest录制
- 标准库类型string笔记
- 通过标记实现对ExpandableListView的子条目长按点击
- eclipse编译下cocos2dx3.x
- HDOJ1240 Asteroids!
- Spring Data是什么?
- set_include_path和get_include_path用法详解
- ioctl用法详解
- Linux gzip: stdin: unexpected end of file 硬盘没有空间
- 升级 gcc 出错排查
- jsp中想给导入的页面传参数