Android ListView复制、删除的实现
适配器MyAdapter:
package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R;
import com.zihao.util.TextManager; import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.widget.BaseAdapter;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast; public class MyAdapter extends BaseAdapter { private List<String> mTitleArray;// 标题列表
private LayoutInflater inflater = null;
private Context mContext;
private PopupWindow popupWindow;
private static final int SHOW_TIME = ;//点击后显示时间 /**
* Adapter构造方法
*
* @param titleArray
*/
public MyAdapter(Context context, List<String> titleArray) {
// TODO Auto-generated constructor stub
this.mTitleArray = titleArray;
this.mContext = context;
inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
initPopupWindow(inflater);
} /**
* 获取总数
*/
@Override
public int getCount() {
// TODO Auto-generated method stub
return mTitleArray.size();
} /**
* 获取Item对象
*/
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mTitleArray.get(position);
} /**
* 获取Item的ID
*/
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub ViewHolder holder; if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item_layout, null);
holder.titleTv = (TextView) convertView.findViewById(R.id.item_tv);
convertView.setTag(holder);//判断View是否存在,不存在则新建,否则拿过来用
} else {
holder = (ViewHolder) convertView.getTag();
} // 设置
holder.titleTv.setText(mTitleArray.get(position));
holder.titleTv.setOnLongClickListener(new OnLongClickListener() { @Override
public boolean onLongClick(View v) {// 长按事件
// TODO Auto-generated method stub
showPop(v);
copyTv.setOnTouchListener(new tvOnTouch(mContext, position));
deleteTv.setOnTouchListener(new tvOnTouch(mContext, position));
return false;
}
}); return convertView;
} private TextView copyTv, deleteTv; /**
* 初始化Popupwindow
*
* @param inflater
*/
private void initPopupWindow(LayoutInflater inflater) {
View view = inflater.inflate(R.layout.pop_item_layout, null);
popupWindow = new PopupWindow(view, , );//使用弹出窗口的形式显示复制,删除按钮
copyTv = (TextView) view.findViewById(R.id.pop_copy_tv);
deleteTv = (TextView) view.findViewById(R.id.pop_delete_tv);
} /**
* 触摸事件
*
* @author zihao
*
*/
class tvOnTouch implements OnTouchListener {
private Context mContext;
private int mPosition; public tvOnTouch(Context context, int position) {
// TODO Auto-generated method stub
this.mContext = context;
this.mPosition = position;
} @Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (v.getId() == R.id.pop_copy_tv) {
TextView tv = (TextView) v;
if (event.getAction() == MotionEvent.ACTION_DOWN) {// 按下
tv.setTextColor(0xff00CD66);
} else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开
tv.setTextColor(0xffffffff);
TextManager.copyText(mContext, mTitleArray.get(mPosition));//调用复制函数
Toast.makeText(mContext, "复制成功", SHOW_TIME).show(); if (popupWindow != null) {
popupWindow.dismiss();
}
}
} else {
TextView tv = (TextView) v;
if (event.getAction() == MotionEvent.ACTION_DOWN) {// 按下
tv.setTextColor(0xff00CD66);
} else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开
tv.setTextColor(0xffffffff);
mTitleArray.remove(mPosition);//删除函数
notifyDataSetChanged();
Toast.makeText(mContext, "删除成功", SHOW_TIME).show(); if (popupWindow != null) {
popupWindow.dismiss();
}
}
}
return true;
} } /**
* Popupwindow显示
*
* @param v
*/
@SuppressWarnings("deprecation")
private void showPop(View v) {
popupWindow.setFocusable(false);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());// 设置此项可点击Popupwindow外区域消失,注释则不消失 // 设置出现位置
int[] location = new int[];
v.getLocationOnScreen(location);
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY,
location[] + v.getWidth() / - popupWindow.getWidth() / ,
location[] - popupWindow.getHeight());
} static class ViewHolder {
TextView titleTv;
} }
pop_item_layout:
<?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="match_parent"
android:background="@drawable/tips_manager_bg"
android:gravity="center"
android:orientation="horizontal"
android:padding="0dp" > <TextView
android:id="@+id/pop_copy_tv"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:paddingBottom="6dp"
android:text="复制"
android:textColor="@android:color/white" />
<!--分割线-->
<View
android:layout_width="4dp"
android:layout_height="fill_parent" /> <TextView
android:id="@+id/pop_delete_tv"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:paddingBottom="6dp"
android:text="删除"
android:textColor="@android:color/white" /> </LinearLayout>
TextManager:
package com.zihao.util; import android.annotation.SuppressLint;
import android.content.ClipboardManager;
import android.content.Context; /**
* 文本操作工具类
*
* @author zihao
*
*/
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public class TextManager { /**
* 复制文本
*
* @param context
* @param message
* // 被复制的文本
*/
public static void copyText(Context context, String message) {
// 获取剪贴板管理服务
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
// 将文本数据复制到剪贴板
cmb.setText(message.trim());
} /**
* 粘贴文本
*
* @param context
* @return
*/
public static String pasteText(Context context) {
// 得到剪贴板管理器
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
return cmb.getText().toString().trim();
} }
MainActivity:在主函数应该有一个事件来触发 pasteText函数
package com.zihao.popdemo; import java.util.ArrayList;
import java.util.List; import com.zihao.adapter.MyAdapter; import android.os.Bundle;
import android.widget.ListView;
import android.app.Activity; /**
* 主界面
*
* @author zihao
*
*/
public class MainActivity extends Activity { private ListView mListView;// ListView
private MyAdapter myAdapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView();
} /**
* 初始化视图
*/
private void initView() {
mListView = (ListView) findViewById(R.id.my_list);
myAdapter = new MyAdapter(this, getListData());
mListView.setAdapter(myAdapter);
} /**
* 获取ListView数据
*
* @return
*/
private List<String> getListData() {
List<String> titleArray = new ArrayList<String>();
for (int i = ; i < ; i++) {
titleArray.add("这是第" + i + "个子项");
}
return titleArray;
} }
代码:这里
Android ListView复制、删除的实现的更多相关文章
- Android ListView 删除动画
Android 的ListView在删除条目时,被删除的条目直接消失,比较生硬,在此实现一下删除动画,大家一起探讨:主要实现原理即是通过Animator来实现被删除条目的动画效果,然后在动画结束时通过 ...
- Android listview addHeaderView 和 addFooterView 详解
addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...
- ListView滑动删除效果实现
通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...
- android ListView优化
android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...
- 利用ListView批量删除item
利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下: package com.test.adapter; import java.util.ArrayList; imp ...
- Android ListView 长按列表弹出菜单
Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...
- android ListView 九大重要属性详细分析、
android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...
- Android ListView onItemClick Not Work
Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...
- 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...
随机推荐
- [LnOI2019]加特林轮盘赌
Luogu5249 轮流开枪打一个环上的人 , 每次\(p\)的概率打死 , \(p\)始终相同 , 从第\(1\)个人开始 , 求第\(k\)个人成为唯一幸存者的概率 \(19.3.30\) 官方题 ...
- Serical Port
QextSerialPort 虽然这次不用写串口,但今后可能要用到的三方类库. 这个帖子下面普及了串口的概念.VC++模块的部分
- system命令
服务查看 查看所有服务运行状态: service --status-all chkconfig --list 查看单个服务的运行状态 service sshd status 查看启动状态,是否开机自动 ...
- vue中nextTick的使用(转载)
转载自:https://www.cnblogs.com/chaoyuehedy/p/8985425.html 简介 vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量 ...
- RHCE 入门 第一篇
随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训
- Android 再谈handler
今天在做http网络事件的响应网络接收处理一般不能放在主线程中使用,目前也只会使用AsyncTask进行处理!之前虽然写过handler处理的一些文章但是发现全不会了!无奈~ 关于handler某位兄 ...
- 我Java学习时的模样(三)
读Java源码 平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知 ...
- 带有Apache Spark的Lambda架构
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 目标 市场上的许多玩家已经建立了成功的MapReduce工作流程来每天处理以TB计的历史数据.但是谁愿意等待24小时才能获得最新的分析结果? ...
- vue-cli中使用stylus
1.在package.json文件中写入依赖: "stylus-loader": "^2.5.0", "stylus": "0 ...
- SIMD
SIMD 概述 数据类型 静态方法:数学运算 静态方法:通道处理 静态方法:比较运算 静态方法:位运算 静态方法:数据类型转换 实例方法 实例:求平均值 概述 SIMD(发音/sim-dee/)是“S ...