侧滑删除进阶(四)

2024-08-31 23:48
文章标签 进阶 删除 侧滑

本文主要是介绍侧滑删除进阶(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在写滑动删除,网上代码又是看的云里雾里,果断自己研究,虽然效果不太好把,但是思路很清晰,代码逻辑很简单


先来看主页面布局

activity_main.xml--很简单就一个自定义listview

<RelativeLayout 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"tools:context="com.example.slidelistview.MainActivity" ><com.example.slidelistview.SlideListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="fill_parent"/></RelativeLayout>

再看看每条item的布局--很简单就2个textview(我都懒得用imageview,怕麻烦)

listview_item.xml

<?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="30dp"android:orientation="horizontal" ><TextViewandroid:id="@+id/textview"android:gravity="center"android:background="#FFA07A"android:layout_width="fill_parent"android:layout_height="50dp"android:text="TextView" /><TextViewandroid:id="@+id/delete"android:gravity="center"android:background="#FF3E96"android:layout_width="50dp"android:layout_height="50dp"android:text="删除" /></LinearLayout>

MainActivity
package com.example.slidelistview;import java.util.ArrayList;import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;public class MainActivity extends Activity {private SlideListView listView;private MyAdapter myAdapter;private ArrayList<String> data = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myAdapter = new MyAdapter();for (int i = 0; i < 10; i++) {data.add("A");}listView = (SlideListView) findViewById(R.id.listview);listView.setAdapter(myAdapter);}class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView,ViewGroup parent) {ViewHolder viewHolder = null;if (convertView == null) {viewHolder = new ViewHolder();convertView = View.inflate(MainActivity.this,R.layout.listview_item, null);viewHolder.textView = (TextView) convertView.findViewById(R.id.textview);viewHolder.deleTextView = (TextView) convertView.findViewById(R.id.delete);convertView.setTag(viewHolder);} else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.textView.setText(data.get(position));viewHolder.deleTextView.setOnClickListener(new OnClickListener() {public void onClick(View v) {data.remove(position);myAdapter.notifyDataSetChanged();listView.getChildAt(position).scrollTo(0, 0);}});return convertView;}class ViewHolder {private TextView textView;private TextView deleTextView;}}
}

SlideListView
package com.example.slidelistview;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;
import android.widget.Scroller;
import android.widget.Toast;public class SlideListView extends ListView {private Scroller scroller;private int downX;private int downY;private int moveX;private int moveY;private int downPosition;private int upPosition;private boolean deleOpen = false;private View slideListItem;private int lastPos = -1;/*** 构造器*/public SlideListView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}public SlideListView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public SlideListView(Context context) {super(context);init(context);}private void init(Context context) {scroller = new Scroller(context);}@Overridepublic boolean onTouchEvent(MotionEvent ev) {final int action = ev.getAction();switch (action) {case MotionEvent.ACTION_DOWN:downX = (int) ev.getX();downY = (int) ev.getY();// 获取按下的条目索引downPosition = pointToPosition(downX, downY);slideListItem = getChildAt(downPosition);if (slideListItem != null) {slideListItem.scrollTo(0, 0);}// 如果按下的不是当前的itemif (lastPos != -1) {if (lastPos != downPosition) {View childAt = getChildAt(lastPos);childAt.scrollTo(0, 0);}}lastPos = downPosition;break;case MotionEvent.ACTION_MOVE:moveX = (int) ev.getX();moveY = (int) ev.getY();int upPosition = pointToPosition(moveX, moveY);if (downPosition == upPosition) {// 是同一个条目if ((downX - moveX) > 50) {if (slideListItem != null) {slideListItem.scrollTo(100, 0);}}}break;case MotionEvent.ACTION_UP:break;default:break;}return super.onTouchEvent(ev);}}

这篇关于侧滑删除进阶(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125347

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

java学习,进阶,提升

http://how2j.cn/k/hutool/hutool-brief/1930.html?p=73689

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图