zoukankan      html  css  js  c++  java
  • 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;
        }
    
    }

    代码:这里

  • 相关阅读:
    python实用库:PrettyTable 学习
    centos启动错误:Inodes that were part of a corrupted orphan linked list found.
    C++:in namespace 'std' does not name a template type
    小程序实现单词查询搜索及搜索的历史记录
    小程序图片懒加载较完美解决方案
    下载文件到本地解压压缩包出现文件损坏,报错问题已解决
    彻底理解cookie,session,token
    vue全家桶(Vue+Vue-router+Vuex+axios)(Vue+webpack项目实战系列之二)
    与关系型数据库相比,MongoDB的优缺点
    漫谈JS 的继承方式
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4216170.html
Copyright © 2011-2022 走看看