您的位置:首页 > 其它

ListView点击出现子菜单

2016-01-05 11:49 375 查看
要想实现点击一个item出现子菜单首先想到的就是android 的expandablelistview控件了,默认自带子菜单,在child方法中就是操作子菜单的方法。可是如果有特殊的业务,必须要在listView中出现子菜单应该怎么做呢?

看下效果图:



先说下思路,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链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: