首页 > 代码库 > Android ListView复制、删除的实现

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 = 1000;//点击后显示时间    /**     * 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, 200, 100);//使用弹出窗口的形式显示复制,删除按钮        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[2];        v.getLocationOnScreen(location);        popupWindow.showAtLocation(v, Gravity.NO_GRAVITY,                location[0] + v.getWidth() / 2 - popupWindow.getWidth() / 2,                location[1] - 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 = 0; i < 10; i++) {            titleArray.add("这是第" + i + "个子项");        }        return titleArray;    }}

代码:这里

 

Android ListView复制、删除的实现