在很多App应用当中我们都看见过各式各样的listview,当然,我们自己对于这个控件肯定也是相当熟悉,那么为什么要在listview中嵌套进一个侧滑删除等这些细节性的功能呢?
其实原因很简单,就是用户体验!试想一下当一个界面中展示给用户得信息过多,而这些信息又并不是特别重要的,那么用户为了方便肯定有这个需求了,而这个方便在我们看来就是需求。接下来看看这个“方便”是怎么达到效果的


activity_main.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true"android:orientation="vertical"tools:context="com.example.administrator.testpopuwindow.MainActivity"><ListView
        android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/listView" /></LinearLayout>

listview_adapter.xml文件

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/hsv"android:layout_width="wrap_content"android:layout_height="80dip"android:scrollbars="none" ><LinearLayout
        android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><LinearLayout
            android:id="@+id/ll_content"android:layout_width="match_parent"android:layout_height="match_parent"><TextView
                android:id="@+id/tv"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="" /></LinearLayout><LinearLayout
            android:id="@+id/ll_action"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><Button
                android:id="@+id/button1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="添加" /><Button
                android:id="@+id/button2"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="删除" /><Button
                android:id="@+id/button3"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="变色" /></LinearLayout></LinearLayout></HorizontalScrollView>

MainActivity

package com.example.administrator.testpopuwindow;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.ListView;public class MainActivity extends AppCompatActivity {private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Instantiation();}public void Instantiation(){listView = (ListView) findViewById(R.id.listView);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);AdapterTest adapterTest = new AdapterTest(this,dm.widthPixels);listView.setAdapter(adapterTest);}}

AdapterTest 适配器

package com.example.administrator.testpopuwindow;import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;/*** Created by Administrator on 2016-05-12.*/
public class AdapterTest extends BaseAdapter implements View.OnClickListener {// 数据源,用于存放颜色值的。private List<Integer> colors;private Context mContext;// 屏幕宽度,由于我们用的是HorizontalScrollView,所以按钮选项应该在屏幕外private int mScreentWidth;private View view;/*** 构造方法** @param context* @param screenWidth*/public AdapterTest(Context context, int screenWidth) {// 初始化mContext = context;mScreentWidth = screenWidth;// 填充list的内容模拟数据,否则应该异步执行colors = new ArrayList<Integer>();for (int i = 0; i < 15; i++) {colors.add(R.color.zise);}}@Overridepublic int getCount() {return colors.size();}@Overridepublic Object getItem(int position) {return colors.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;// 如果没有设置过,初始化convertViewif (convertView == null) {// 获得设置的viewconvertView = LayoutInflater.from(mContext).inflate(R.layout.listview_adapter, parent, false);// 初始化holderholder = new ViewHolder();holder.hSView = (HorizontalScrollView) convertView.findViewById(R.id.hsv);holder.action = convertView.findViewById(R.id.ll_action);holder.btOne = (Button) convertView.findViewById(R.id.button1);holder.btTwo = (Button) convertView.findViewById(R.id.button2);holder.btThree = (Button) convertView.findViewById(R.id.button3);holder.tvContent = (TextView) convertView.findViewById(R.id.tv);// 设置内容view的大小为屏幕宽度,这样按钮就正好被挤出屏幕外holder.content = convertView.findViewById(R.id.ll_content);LayoutParams lp = holder.content.getLayoutParams();lp.width = mScreentWidth;convertView.setTag(holder);} else {// 有直接获得ViewHolderholder = (ViewHolder) convertView.getTag();}// 把位置放到view中,这样点击事件就可以知道点击的是哪一条itemholder.btOne.setTag(position);holder.btTwo.setTag(position);holder.btThree.setTag(position);// 设置监听事件convertView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:if (view != null) {ViewHolder viewHolder1 = (ViewHolder) view.getTag();viewHolder1.hSView.smoothScrollTo(0, 0);}case MotionEvent.ACTION_UP:// 获得ViewHolderViewHolder viewHolder = (ViewHolder) v.getTag();view = v;// 获得HorizontalScrollView滑动的水平方向值.int scrollX = viewHolder.hSView.getScrollX();// 获得操作区域的长度int actionW = viewHolder.action.getWidth();// 注意使用smoothScrollTo,这样效果看起来比较圆滑,不生硬// 如果水平方向的移动值<操作区域的长度的一半,就复原if (scrollX < actionW / 2) {viewHolder.hSView.smoothScrollTo(0, 0);}else{// 否则的话显示操作区域viewHolder.hSView.smoothScrollTo(actionW, 0);}return true;}return false;}});// 这里防止删除一条item后,ListView处于操作状态,直接还原if (holder.hSView.getScrollX() != 0) {holder.hSView.scrollTo(0, 0);}// 设置背景颜色,设置填充内容.holder.content.setBackgroundResource(colors.get(position));holder.tvContent.setText("" + position);// 设置监听事件holder.btOne.setOnClickListener(this);holder.btTwo.setOnClickListener(this);holder.btThree.setOnClickListener(this);return convertView;}/*** ViewHolder** @Title:* @Description:主要是避免了不断的view获取初始化.*/class ViewHolder {public HorizontalScrollView hSView;public View content;public TextView tvContent;public View action;public Button btOne;public Button btTwo;public Button btThree;}@Overridepublic void onClick(View v) {int position = (Integer) v.getTag();switch (v.getId()) {case R.id.button1:colors.add(R.color.zise);break;case R.id.button2:colors.remove(position);break;case R.id.button3:if (colors.get(position) == R.color.zise) {colors.set(position, R.color.huang);} else {colors.set(position, R.color.zise);}break;default:break;}// 刷新ListView内容notifyDataSetChanged();}
}



OK! listview侧滑功能就实现了(原理:HorizontalScrollView嵌套ListView).

基于ListView的滑动删除、添加、修改相关推荐

  1. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/18311877),请尊重他人的辛勤劳动成果,谢谢! 今天还是 ...

  2. Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17539199) 我在上一篇文章中Android 带你从源码的角度解析 ...

  3. android 继承ListView实现滑动删除功能.

    在一些用户体验较好的应用上,可以经常遇见   在ListView中  向左或向右滑动便可删除那一项列表. 具体实现  则是继承ListView实现特定功能即可. (1). 新建 delete_butt ...

  4. 基于陷门单向函数可删除可修改的区块链方案--POSpace

    实现思路 通过引入机动因子,重构区块签名子块,在数据失效或错误时,只要超过阈值数节点同意,便可实现区块数据的合法修改,同时保持区块链接不变,除修改数据,其余数据不变,全网仍可按原始验证方式对数据合法性 ...

  5. 删除添加修改查询c语言报告,c语言课程设计报告 车辆违章查询系统.pdf

    c语言课程设计报告 车辆违章查询系统 C 语言课程设计 姓 名:刘 风 学 号:8100612 时 间:2011/6/11 指导教师:王 薇 C 语言课程设计 题目:车辆违章查询系统 要求: 能够根据 ...

  6. Android ListView 横向滑动删除 Item

    注册ListView的onTouchListener() 具体代码如下: listview.setOnTouchListener(new OnTouchListener() {float x,y,ux ...

  7. 仿QQ侧滑删除,Listview上下滑动,Listview的iteam的点击事件等bug的解决

         网上ListView横向滑动删除Item这样的介绍也很多,但实用性不强,没有解决横向滑动和item的点击事件的冲突,废话少说,有图有真相,下面直接上代码 1:侧滑 2:侧滑的点击事件 3:i ...

  8. android listview左滑删除

    之前,自己使用listview一直是长按删除,不过发现qq的消息和ios的都是侧滑删除,觉得效果很好,于是自己就想做一个侧滑删除.在网上找了些资料,有很多不是我理想的侧滑删除,最后还是找到了一个不错的 ...

  9. 自定义listView添加滑动删除功能

    今天研究了一下android里面的手势,结合昨天学习的自定义View,做了一个自定义的listview,继承自listView,添加了条目的滑动手势操作,滑动后出现一个删除按钮,点击删除按钮,触发一个 ...

最新文章

  1. 用Python分析为什么在中国没学历的外教为啥能拿几万高薪?
  2. 目标检测 | 盘点目标检测中的特征融合技巧(根据YOLO v4总结)
  3. yolov5的3.0版本代码在训练的时候报错:ImportError: cannot import name ‘amp‘ from ‘torch.cuda‘ 以及yolov5的3.0环境安装
  4. 中小型局域网规划实战案例
  5. Python正则表达式之额外补充(7)
  6. Linux内存管理之一 分段与分页
  7. 真正理解红黑树,真正的
  8. 【Servlet】总结 JSP的四大域对象、Servlet的四个作用域:pageContext、request、session、application
  9. postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
  10. java 内存同步_Java中的硬件事务性内存,或者为什么同步将再次变得很棒
  11. 微机原理实验1:字符串匹配程序实验
  12. 女人必知:10个好习惯 让老公不想出轨
  13. gtj2018如何生成工程量报表_土建软件GTJ2018中的十个问题及解决方法
  14. PAT-乙级-1034 有理数四则运算
  15. Gink掉过的坑(一):将CCTableView导入到lua中
  16. NC5.X系列单点登录
  17. 程序员的系统桌面应该是什么样的
  18. Java 金额转换 阿拉伯数字金额转换成汉字大写金额
  19. Android--剪贴板
  20. 【JAVA长虹键法】第八式 代理模式(23种设计模式)

热门文章

  1. 编程到底学的是什么,主次又是什么
  2. excel计算加权平均方法
  3. converting character set: invalid arguements
  4. vue3-HTTP请求
  5. 【JY】橡胶支座精细化模拟与有限元分析注意要点
  6. 坑爹公司大盘点 --- 转自拉钩
  7. MAC快速查看本地 SSH KEY
  8. 单机大天使服务器端修改商店,《大天使之剑h5》变态单机版最新开服_无限钻石打造最强阵容_满V公益私服...
  9. deepin系统中.txt文件图标显示内容问题_深度操作系统 deepin V20(UOS)的10大优化操作
  10. galaxy 用不了_开箱即用使Galaxy S9更好的六种方法