适配器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. 洛谷 P3204 [HNOI2010]公交线路

    题面 luogu 题解 矩阵快速幂\(+dp\) 其实也不是很难 先考虑朴素状压\(dp\) \(f[i][S]\) 表示最慢的车走到了\(i\),\([i, p+i-1]\)的覆盖情况 状态第一位一 ...

  2. springcloud(三)-Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  3. MSSQL远程连接操作(转)

    --遠程連接操作 /****************************************************************************************** ...

  4. Locust源码目录结构及模块作用

    Locust源码目录结构及模块作用如下: 参考文章:https://blog.csdn.net/biheyu828/article/details/84031942

  5. 关于CAS

    CAS就是Compare And Swap. CAS操作是在每一次做修改操作时,并不加锁,而是在修改时比较旧值是否有变化,如果旧值不变就执行修改,如果旧值有变,则修改失败. 使用sql表示就是 upd ...

  6. V1-bug Alpha阶段测试报告

    发现的Bug Bug现象 Bug原因 是否解决 访问到错误的视图 路由正则写的太过宽泛 是 主题太长时超过页面宽度,导致超过顶部的宽度 / 否 无法使用域名访问服务器 后端没有在配置文件的ALLOWE ...

  7. PIXI FlappyBird详解(9)

    本文为了学习及使用pixi参考该文,使用pixi实现 这个实方式跟玉兔太空类似, 这里介绍下实现步骤 1.创建舞台及应用大小根据实际去定义 2.创建背景素材,可以采取纹理图集,在前边有提过或是看官网了 ...

  8. 资料整理:基于node push server实现push notification

    chat example based on ionic/ socket.io/ redis https://github.com/jbavari/ionic-socket.io-redis-chat ...

  9. 012-MD5Utils工具类模板

    package ${enclosing_package}; import java.math.BigInteger; import java.security.MessageDigest; impor ...

  10. document.documentElement和document.body 与document.compatMode的关系

    首先我们看看document.compatMode(兼容模式): document.compatMode它有两种可能的返回值:BackCompat和CSS1Compat, document.compa ...