适配器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. 大数据-zookeeper集群安装

    一.安装前发现的问题: 1.安装前期发现jps权限不够 [root@master1 ~]# jps -bash: /opt/workspace/jdk1./bin/jps: Permission de ...

  2. c++重载operator的示例 非原创

    #include<iostream> #include<vector> using namespace std; class test{ public: int v; /*构造 ...

  3. alpha-beta搜索算法

    alpha-beta搜索(min-max搜索): 简称mfs,用来解决双方最优决策博弈问题. 核心思想:在搜索树中,下一层越小,对当前层越有利,由于取max,一旦下一层出现了比其他孩子结果更大的值,那 ...

  4. 用matplotlib绘制图像

    实例一: import numpy as np import matplotlib.pyplot as plt x=np.linspace(0,6,100) y=np.cos(2*np.pi*x)*n ...

  5. Weblogic反序列化远程命令执行漏洞(CNVD-C-2019-48814)测试

    漏洞简介 2018年4月18日,Oracle官方发布了4月份的安全补丁更新CPU(Critical Patch Update),更新中修复了一个高危的 WebLogic 反序列化漏洞CVE-2018- ...

  6. oracle12c之二 控制PDB中SGA 与 PGA 内存使用

    oracle12c之 控制pdb中sga 与 pga 内存使用 Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多 ...

  7. svn: Failed to run the WC DB work queue associated svn的bug解决

    第一步,下载sqlite 官方网址  :https://www.sqlite.org/download.html 第二步:解压放在c盘 第三步:配置环境变量 第四步:找到工作空间的.svn文件,cmd ...

  8. DP Intro - poj 1947 Rebuilding Roads

    算法: dp[i][j]表示以i为根的子树要变成有j个节点的状态需要减掉的边数. 考虑状态转移的时候不考虑i的父亲节点,就当不存在.最后统计最少减去边数的 时候+1. 考虑一个节点时,有两种选择,要么 ...

  9. tomcat端口冲突解决 Address already in use: JVM_Bind <null>:8080

    java.net.BindException: Address already in use: JVM_Bind <null>:8080 Caused by: java.net.BindE ...

  10. unity鼠标拖动物体旋转

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...