ListView的下拉抽屉效果
来源:互联网 发布:农村上网数据 编辑:程序博客网 时间:2024/06/16 20:53
效果如下图:当点击listview中的item时,下方会像抽屉一下显示一个新的布局出来,当重复点击同一个item或者点击别的item,上个展示出来的布局就会隐藏。
实现起来也很简单,就是在listview的item中添加一个监听事件,监听用户是否点击了item,点击了相应item则会在相应的下面显示布局。将界面中其他的以及显示的隐藏起来。下面看一下核心代码:
这个demo主要是给刚刚接触Android的小白看的。博主自己也是小白希望各位大牛指导指导!
item布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <RelativeLayout android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="70dp"> <ImageView android:id="@+id/imageview" android:layout_width="50dp" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/imageview" android:text="这个是测试用条目" /> <ImageView android:id="@+id/checkbox" android:layout_width="28dp" android:layout_height="28dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:background="@drawable/right_icon_selector" android:clickable="true" /> </RelativeLayout> <include layout="@layout/item_hide_layout" /></LinearLayout>
下面点击后要显示的布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#bcb9b9" android:id="@+id/ll_hide" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" android:visibility="gone" > <TextView android:id="@+id/hide_1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="收藏" /> <TextView android:id="@+id/hide_2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="查看详情" /> <TextView android:id="@+id/hide_3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="分享" /> <TextView android:id="@+id/hide_4" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="删除" /> <TextView android:id="@+id/hide_5" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="属性" /> </LinearLayout>
适配器:
package com.example.administrator.liststretchdemo.adapter;import android.content.Context;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.example.administrator.liststretchdemo.R;import java.util.ArrayList;/** * Created by Administrator on 2017/8/17. */public class MyAdapter extends BaseAdapter implements View.OnClickListener { private ArrayList<String> list = null; private Context context = null; private int clickPosition = -1;//记录用户点击了的item public Boolean flag = false; //标识下拉view的显示状态 public MyAdapter(Context context, ArrayList<String> list){ this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final MyViewHolder vh; if (convertView == null) { convertView = View.inflate(context, R.layout.item_layout, null); vh = new MyViewHolder(convertView); convertView.setTag(vh); } else { vh = (MyViewHolder) convertView.getTag(); } vh.tv_test.setText(list.get(position)); //判断用户是不是点击了同一个item if (clickPosition == position) { //根据flage来处理下拉view是该消失 还是该展开状态 if(flag){ vh.ll_hide.setVisibility(View.GONE); flag = false; }else { vh.ll_hide.setVisibility(View.VISIBLE); flag = true; } } else { //当填充的条目position不是刚才点击所标记的position时,让其隐藏,状态图标为false。 vh.ll_hide.setVisibility(View.GONE); Log.e("listview","状态改变"); } vh.hide_1.setOnClickListener(this); vh.hide_2.setOnClickListener(this); vh.hide_3.setOnClickListener(this); vh.hide_4.setOnClickListener(this); vh.hide_5.setOnClickListener(this); vh.listtiem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Toast.makeText(context, "被点了", Toast.LENGTH_SHORT).show(); clickPosition = position;//记录点击的position notifyDataSetChanged();//刷新adapter重新填充条目。在重新填充的过程中,被记录的position会做展开或隐藏的动作,具体的判断看上面代码 //在此处需要明确的一点是,当adapter执行刷新操作时,整个getview方法会重新执行,也就是条目重新做一次初始化被填充数据。 } }); vh.selectorImg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (vh.selectorImg.isSelected()) { vh.selectorImg.setSelected(false); //取消选中时的业务代码 Log.e("but", "onClick: 没选中状态"); } else { vh.selectorImg.setSelected(true); //做当被选中时的业务代码 Log.e("but", "onClick: 选中状态"); } } }); return convertView; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.hide_1: Toast.makeText(context, "收藏", Toast.LENGTH_SHORT).show(); break; case R.id.hide_2: Toast.makeText(context, "查看详情", Toast.LENGTH_SHORT).show(); break; case R.id.hide_3: Toast.makeText(context, "分享", Toast.LENGTH_SHORT).show(); break; case R.id.hide_4: Toast.makeText(context, "删除", Toast.LENGTH_SHORT).show(); break; case R.id.hide_5: Toast.makeText(context, "属性", Toast.LENGTH_SHORT).show(); break; } } class MyViewHolder { View itemView; TextView tv_test; TextView hide_1, hide_2, hide_3, hide_4, hide_5; ImageView selectorImg; LinearLayout ll_hide; RelativeLayout listtiem; public MyViewHolder(View itemView) { this.itemView = itemView; tv_test = (TextView) itemView.findViewById(R.id.tv_test); selectorImg = (ImageView) itemView.findViewById(R.id.checkbox); hide_1 = (TextView) itemView.findViewById(R.id.hide_1); hide_2 = (TextView) itemView.findViewById(R.id.hide_2); hide_3 = (TextView) itemView.findViewById(R.id.hide_3); hide_4 = (TextView) itemView.findViewById(R.id.hide_4); hide_5 = (TextView) itemView.findViewById(R.id.hide_5); ll_hide = (LinearLayout) itemView.findViewById(R.id.ll_hide); listtiem = (RelativeLayout) itemView.findViewById(R.id.list_item); } }}
主要代码就这些。这些代码主要参考了http://www.cnblogs.com/epmouse/p/5555264.html的代码来的,将demo改成了Android studio 的项目。
如果有什么问题希望大家一起探讨一起进步。博主也是刚接触Android的小白。
demo 下载:
GitHub
https://github.com/cp1153750171/ChenpCode.git
阅读全文
1 0
- ListView的下拉抽屉效果
- 一个实现抽屉滑动删除效果的listView
- 自定义listview实现下拉刷新的效果
- 简单的抽屉效果
- 简单的抽屉效果
- 简单的抽屉效果
- 抽屉效果的实现
- ListView下拉刷新效果
- ListView弹性下拉效果
- android ListView向下展开 抽屉效果
- android ListView向下展开 抽屉效果
- 下拉抽屉菜单的实现
- 防ios的抽屉效果,防qq的抽屉效果
- SlideringDrawer的使用(抽屉效果)
- android抽屉效果的实现
- 抽屉效果的导航菜单
- DrawerLayout实现抽屉的效果
- 抽屉效果的简单实现
- SpringAOP技术学习---Day2
- org.hibernate.exception.DataException: could not execute statement
- 在salesforce中使用FieldSet实例
- node 第二记 模块
- 开发一个Maven插件的过程详解
- ListView的下拉抽屉效果
- linux java编译步骤
- 51nod1006 最长公共子序列Lcs dp
- composer 报 zlib_decode(): data error
- orhanobut/logger的使用
- 响应式图片<picture>标签兼容处理(IE9)
- 击杀大魔王
- Android studio使用JNI实例
- 单片机