ListView点击出现子菜单
2016-01-05 11:49
375 查看
要想实现点击一个item出现子菜单首先想到的就是android 的expandablelistview控件了,默认自带子菜单,在child方法中就是操作子菜单的方法。可是如果有特殊的业务,必须要在listView中出现子菜单应该怎么做呢?
看下效果图:
先说下思路,listView是需要item的,item咱们又可以自己来定义,那么,如果定义一个item,控制一部分item的控件显示和隐藏是不是能够达到预期的效果?接下来写一段代码来验证下。
首先定义item的布局。
给listView控件设置了点击事件之后,就在点击事件中来操作,currentPosition 这是定义的一个全局变量,这关键就在于使用这个全局变量。如果当前项为展开,则将其置为-1,目的是为了让其隐藏,如果当前项为隐藏,则将当前位置设置给全局变量,让其展开,这也就是借助于中间变量实现布局的展开与隐藏。
做好这一步之后功能基本上就出来了,如果有什么特殊的业务具体再根据业务设计功能。
点击打开Demo链接
看下效果图:
先说下思路,listView是需要item的,item咱们又可以自己来定义,那么,如果定义一个item,控制一部分item的控件显示和隐藏是不是能够达到预期的效果?接下来写一段代码来验证下。
首先定义item的布局。
<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/list_selector" android:orientation="vertical" > <RelativeLayout android:id="@+id/item_layout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="5dip" android:layout_marginLeft="5dip" android:layout_marginTop="5dip" android:orientation="vertical" > <TextView android:id="@+id/item_name" style="@style/note_name_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:layout_marginTop="5dip" android:maxWidth="240dip" android:textColor="#fff" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dip" android:orientation="horizontal" > <TextView android:id="@+id/item_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|left" android:layout_marginRight="20dip" android:layout_weight="1" android:maxWidth="240dip" android:textColor="#fff" android:textSize="12sp" /> <TextView android:id="@+id/item_pm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_marginLeft="20dip" android:layout_weight="1" android:textColor="#fff" android:textSize="12sp" /> </LinearLayout> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_gravity="right|center_vertical" android:layout_marginRight="5dip" android:background="@drawable/group_arrow_right" android:gravity="right|center_vertical" /> </RelativeLayout> <LinearLayout android:id="@+id/layout_other" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#808080" android:gravity="center" android:orientation="horizontal" > <LinearLayout android:id="@+id/item_open" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:background="@drawable/list_selector1" android:clickable="false" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/open_icon" android:gravity="right|center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="打开" android:textColor="#fff" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/item_edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:clickable="false" android:background="@drawable/list_selector1" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/edit_icon" android:gravity="right|center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="编辑" android:textColor="#fff" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/item_move" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:clickable="false" android:background="@drawable/list_selector1" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/move_icon" android:gravity="right|center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="移动" android:textColor="#fff" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/item_delete" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:clickable="false" android:background="@drawable/list_selector1" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/delete_icon" android:gravity="right|center_vertical" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:gravity="center_horizontal" android:text="删除" android:textColor="#fff" android:textSize="12sp" /> </LinearLayout> </LinearLayout> </LinearLayout></span>可以看出,在上面item的布局当中明显是嵌套了两个布局,一个大的linearLayout中嵌套了一个RelativeLayout和一个LinearLayout,其中LinearLayout就是当作每个item的子菜单,也就是点击listView的item时要控制这个控件的显示和隐藏。下面开始写如何控制的类。只贴出一部分关键性的代码,其余的下面会给出demo的链接。
<span style="font-size:14px;"> @Override public void onItemClick(AdapterView<?> listview, View arg1, int position, long arg3) { //如果点击的是当前项,则将其展开,否则将其隐藏 if(currentPosition == position){ currentPosition = -1; }else{ currentPosition = position; } // currentPosition = -1; noteBookAdapter.notifyDataSetChanged(); }</span>
给listView控件设置了点击事件之后,就在点击事件中来操作,currentPosition 这是定义的一个全局变量,这关键就在于使用这个全局变量。如果当前项为展开,则将其置为-1,目的是为了让其隐藏,如果当前项为隐藏,则将当前位置设置给全局变量,让其展开,这也就是借助于中间变量实现布局的展开与隐藏。
做好这一步之后功能基本上就出来了,如果有什么特殊的业务具体再根据业务设计功能。
点击打开Demo链接
相关文章推荐
- JPA概要
- Google Map开发系列(六)——谷歌地图坐标系统总结
- 模拟TCP通信协议
- awk用法一
- Eclipse Java注释模板
- formatNumber详解
- 1月风怒(3)
- MySQL JOIN操作
- 送2015,迎2016
- Android 中InputMethodManager类 (输入法) 的用法
- 一种LaTeX类文件 (cls) 与主文件 (tex)的参数传递方法
- django开发框架之jumpserver
- mongodb 2.6.6 在window10下的安装
- GIT reset命令详解
- tomcta启动时需要执行的方法--解决方案
- tomcta启动时需要执行的方法--解决方案
- cocos2dx2.x&3.x部分函数对照表
- 使用leangoo实现多泳道看板任务
- Linux基础指令
- Linux基础指令