Android中长按ListView实现批量删除

参考:http://www.cnblogs.com/LIANQQ/p/3584374.html

1、布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ListView
  android:id="@+id/notReadList"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:cacheColorHint="#FFF">
    </ListView>
    <RelativeLayout
        android:id="@+id/relative"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:visibility="gone">
        <Button
            android:id="@+id/cancle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:background="@null"
            android:text="撤销    |"
            android:textSize="20sp"
            />
        <TextView
            android:id="@+id/txtcount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="共计"
            android:textSize="15sp" />
        <Button
            android:id="@+id/delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:background="@null"
            android:text="|  删除"
            android:textSize="20sp" />
    </RelativeLayout>

</LinearLayout>



2、代码实现

public class NotReadFragment extends Fragment {

    private ListView listView;
    private Button cancelButton;
    private Button deleteButton;
    private TextView txtCount;
    private boolean isMulChoice = false;//是否长按
    private List<String> array = new ArrayList<String>();//保存初始数据
    private List<String> selectId = new ArrayList<String>();//保存选择的数据
    private SparseBooleanArray isCheck = new SparseBooleanArray();//保存在滑动过程中CheckBox的状态
    private RelativeLayout relativeLayout;//长按后弹出按钮的布局
    private MyAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.notreadfragment, container, false);
        listView = (ListView) view.findViewById(R.id.notReadList);
        relativeLayout = (RelativeLayout) view.findViewById(R.id.relative);
        cancelButton = (Button) view.findViewById(R.id.cancle);
        deleteButton = (Button) view.findViewById(R.id.delete);
        txtCount = (TextView) view.findViewById(R.id.txtcount);
        cancelButton.setOnClickListener(listener);
        deleteButton.setOnClickListener(listener);
        //初始化数据
        init();
        adapter = new MyAdapter(getActivity());
        listView.setAdapter(adapter);
        return view;
    }

    public void init() {
        for (int i = 0; i < 20; i++) {
            array.add("looper" + i);
        }
    }

    private View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.delete:
                    isMulChoice = false;
                    for (int i = 0; i < selectId.size(); i++) {
                        for (int j = 0; j < array.size(); j++) {
                            if (selectId.get(i).equals(array.get(j))) {
                                array.remove(j);
                            }
                        }
                    }
                    selectId.clear();
                    adapter = new MyAdapter(getActivity());
                    listView.setAdapter(adapter);
                    relativeLayout.setVisibility(View.GONE);
                    break;
                case R.id.cancle:
                    isMulChoice = false;
                    selectId.clear();
                    adapter = new MyAdapter(getActivity());
                    listView.setAdapter(adapter);
                    relativeLayout.setVisibility(View.GONE);
                    break;
                default:
                    break;
            }
        }
    };

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    class MyAdapter extends BaseAdapter {
        private Context context;
        private LayoutInflater inflater = null;
        public MyAdapter(Context context) {
            this.context = context;
            this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            for (int i = 0; i < array.size(); i++) {
                isCheck.put(i, false);
            }
        }
        @Override
        public int getCount() {
            return array.size();
        }
        @Override
        public Object getItem(int position) {
            return array.get(position);
        }
        @Override
        public long getItemId(int position) {
            return position;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            if (null == convertView) {
                convertView = inflater.inflate(R.layout.item, null);
                holder = new ViewHolder();
                holder.content = (TextView) convertView.findViewById(R.id.listItem);
                holder.time = (TextView)convertView.findViewById(R.id.time);
                holder.detail = (TextView)convertView.findViewById(R.id.detail);
                holder.isSelect = (CheckBox) convertView.findViewById(R.id.checkItem);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.content.setText(array.get(position));
            holder.isSelect.setChecked(isCheck.get(position));
            if (isMulChoice){
                holder.isSelect.setVisibility(CheckBox.VISIBLE);
            }else {
                holder.isSelect.setVisibility(CheckBox.INVISIBLE);
            }
            //长按
            convertView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    isMulChoice = true;
                    selectId.clear();
                    relativeLayout.setVisibility(View.VISIBLE);
                    adapter = new MyAdapter(context);
                    listView.setAdapter(adapter);
                    return true;
                }
            });
            //点击选择
            convertView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (isMulChoice) {
                        if (holder.isSelect.isChecked()) {
                            holder.isSelect.setChecked(false);
                            selectId.remove(array.get(position));
                            isCheck.put(position,false);
                        } else {
                            holder.isSelect.setChecked(true);
                            selectId.add(array.get(position));
                            isCheck.put(position,true);
                        }
                        txtCount.setText("共选择了" + selectId.size() + "");
                    } else {
                        Toast.makeText(context, "点击了" + array.get(position) + "", Toast.LENGTH_SHORT).show();
                    }
                }
            });
            return convertView;
        }
    }
    final class ViewHolder {
        public TextView content;
        public TextView time;
        public TextView detail;
        public CheckBox isSelect;
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值