适配器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复制、删除的实现的更多相关文章

  1. Android ListView 删除动画

    Android 的ListView在删除条目时,被删除的条目直接消失,比较生硬,在此实现一下删除动画,大家一起探讨:主要实现原理即是通过Animator来实现被删除条目的动画效果,然后在动画结束时通过 ...

  2. Android listview addHeaderView 和 addFooterView 详解

    addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...

  3. ListView滑动删除效果实现

    通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...

  4. android ListView优化

    android ListView通过优化重用历史缓存实现.listview相应的数据适配器一般使用自己定义BaseAdapter子类,重用历史缓冲区来提高性能. 例如,下面的示例代码演示: 1.lis ...

  5. 利用ListView批量删除item

    利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下: package com.test.adapter; import java.util.ArrayList; imp ...

  6. Android ListView 长按列表弹出菜单

    Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...

  7. android ListView 九大重要属性详细分析、

    android ListView 九大重要属性详细分析. 1.android ListView 一些重要属性详解,兄弟朋友可以参考一下. 首先是stackFromBottom属性,这只该属性之后你做好 ...

  8. Android ListView onItemClick Not Work

    Android ListView onItemClick Not Work ListView item中有Button和RadioButton的时候,它的Item点击事件不起作用,需要设置item的属 ...

  9. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d3e3ab10c62013697408 作者:黄宁源 一,背景 Recy ...

随机推荐

  1. [LnOI2019]加特林轮盘赌

    Luogu5249 轮流开枪打一个环上的人 , 每次\(p\)的概率打死 , \(p\)始终相同 , 从第\(1\)个人开始 , 求第\(k\)个人成为唯一幸存者的概率 \(19.3.30\) 官方题 ...

  2. Serical Port

    QextSerialPort 虽然这次不用写串口,但今后可能要用到的三方类库. 这个帖子下面普及了串口的概念.VC++模块的部分

  3. system命令

    服务查看 查看所有服务运行状态: service --status-all chkconfig --list 查看单个服务的运行状态 service sshd status 查看启动状态,是否开机自动 ...

  4. vue中nextTick的使用(转载)

    转载自:https://www.cnblogs.com/chaoyuehedy/p/8985425.html 简介 vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量 ...

  5. RHCE 入门 第一篇

    随着工作压力越来越大,我们越需要技术储备. 从2017年10月14日开始参加RHCE培训

  6. Android 再谈handler

    今天在做http网络事件的响应网络接收处理一般不能放在主线程中使用,目前也只会使用AsyncTask进行处理!之前虽然写过handler处理的一些文章但是发现全不会了!无奈~ 关于handler某位兄 ...

  7. 我Java学习时的模样(三)

    读Java源码 平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知 ...

  8. 带有Apache Spark的Lambda架构

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 目标 市场上的许多玩家已经建立了成功的MapReduce工作流程来每天处理以TB计的历史数据.但是谁愿意等待24小时才能获得最新的分析结果? ...

  9. vue-cli中使用stylus

      1.在package.json文件中写入依赖: "stylus-loader": "^2.5.0", "stylus": "0 ...

  10. SIMD

    SIMD 概述 数据类型 静态方法:数学运算 静态方法:通道处理 静态方法:比较运算 静态方法:位运算 静态方法:数据类型转换 实例方法 实例:求平均值 概述 SIMD(发音/sim-dee/)是“S ...