Android--ListView点击Item展开的实现

时间:2021-07-22 21:33:43

最近想写一个小程序,为了实现点击ListView展开的效果,从网上找了一下,也没找到好的实现方法,跟自己想的思路差不多,最后决定还是自己想好了。

一开始是想使用 ExpandableListView 实现点击展开的,做了一下还行效果出来了。

最后还是想使用 ListView来实现。

思路是这样的:

1、先定义ListView里Item的xml布局:

Android--ListView点击Item展开的实现

蓝色框住的地方是隐藏的,这里为了显示效果才显示出来。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<RelativeLayout
    android:layout_width="match_parent" android:layout_height="60dp"
    android:id="@+id/rl_appitem">

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/iv_icon"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:layout_marginRight="5dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="软件名"
        android:id="@+id/tv_name"
        android:layout_alignTop="@+id/iv_icon"
        android:layout_toEndOf="@+id/iv_icon"
        android:textSize="20dp"
        android:textColor="@color/text_black"
        android:singleLine="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="安装位置"
        android:id="@+id/tv_location"
        android:layout_below="@+id/tv_name"
        android:layout_toEndOf="@+id/iv_icon"
        android:textSize="16dp"
        android:singleLine="true" />


</RelativeLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        android:layout_alignStart="@+id/iv_icon"
        android:gravity="center_vertical"
        android:background="#ffdadada"
       <span style="color:#FF0000;"> android:visibility="gone"</span>
        android:id="@+id/ll_app_expand">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="卸载"
            android:id="@+id/tv_uninstall"
            android:layout_weight="1"
            android:drawableLeft="@mipmap/img1"
            android:gravity="center_vertical"
            android:layout_marginLeft="20dp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="打开"
            android:id="@+id/tv_open"
            android:layout_weight="1"
            android:drawableLeft="@mipmap/img2"
            android:gravity="center_vertical" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="分享"
            android:id="@+id/tv_share"
            android:layout_weight="1"
            android:drawableLeft="@mipmap/img3"
            android:gravity="center_vertical"
            android:layout_marginRight="20dp" />
    </LinearLayout>
</LinearLayout>

2、在Activity里定义ListView的点击事件 setOnItemClickListener,点击之后显示隐藏区,就是我们要实现的展开效果:

appList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (position != 0 && position != (userAppListInfo.size() + 1)) {
                    LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll_app_expand);
                    TextView tv_uninstall = (TextView) view.findViewById(R.id.tv_uninstall);
                    TextView tv_open = (TextView) view.findViewById(R.id.tv_open);
                    TextView tv_share = (TextView) view.findViewById(R.id.tv_share);

                    tv_uninstall.setOnClickListener(new MyOnclickListener());
                    tv_open.setOnClickListener(new MyOnclickListener());
                    tv_share.setOnClickListener(new MyOnclickListener());
                    //显示隐藏的bar
                    ll.setVisibility(View.VISIBLE);

                    if (position < (userAppListInfo.size() + 1)) {
                        appInfo = userAppListInfo.get(position - 1);
                    } else {
                        appInfo = sysAppListInfo.get(position-(userAppListInfo.size()+2));
                    }
                }
            }
        });

3、为三个展开区域的按钮添加点击事件

基本的思路就是这样了。

附上源码:文件不知道怎么上传呢?

直接到GitHub下砸吧:https://github.com/StarsAaron/MobileAssistant.git

要使用Android studio打开哦!!!!!!!