Android ListView复制、删除的实现

时间:2021-04-04 09:21:27

适配器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;
} }

代码:这里