android中listview的长按删除多选功能实现

首先先写布局文件界面样式
这里写图片描述
下面是布局代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/white">
<!--收件箱title-->
    <RelativeLayout
        android:id="@+id/main_title"
        style="@style/mailtitle_rl_style">

        <ImageView
            android:id="@+id/img_inboxmenu"
            style="@style/mailtitle_leftiv_style"
            android:background="@drawable/inbox_menu"/>
        <TextView
            android:id="@+id/tv_choseall"
            style="@style/right_tv_style"
            android:text="@string/long_all"
            android:layout_alignTop="@+id/img_inboxedit"
            android:visibility="gone"
            />
        <TextView
            android:id="@+id/title_name"
            style="@style/mailtitle_txt_style"
            android:text="@string/mail_inbox" />

        <ImageButton
            android:id="@+id/img_inboxedit"
            style="@style/mailtitle_tightiv_style"
            android:background="@drawable/inbox_edit01"
            />
        <TextView
            android:id="@+id/tv_cencal"
            style="@style/writeemail_righttv_style"
            android:text="@string/long_cencal"
            android:visibility="gone"/>
    </RelativeLayout>
    <!--搜索框-->
    <RelativeLayout
        android:id="@+id/rl_search_edittext"
        android:layout_width="match_parent"
        android:layout_height="@dimen/view_40dp"
        android:layout_below="@+id/main_title"
        android:layout_marginTop="@dimen/view_10dp"
        >
        <TextView
            android:id="@+id/edit_search"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:width="@dimen/view_1dp"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            android:hint="搜索"
            android:paddingLeft="@dimen/view_20dp"
            android:drawableLeft="@drawable/inbox_search"
            android:background="@drawable/mail_search_deittext_shape"
            android:textColor="#898989"
            android:paddingRight="@dimen/view_5dp"
            />
    </RelativeLayout>
    <com.xjr2.view.PullToRefreshView
        android:id="@+id/pull2refresh"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:layout_below="@+id/rl_search_edittext"
        android:layout_alignLeft="@+id/rl_search_edittext"
        android:layout_alignStart="@+id/rl_search_edittext"
        android:orientation="vertical">
        <ListView
            android:id="@+id/mailinbox_lv"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
        </ListView>
    </com.xjr2.view.PullToRefreshView>
    <RelativeLayout
        android:id="@+id/rl_longchose"
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_centerHorizontal="true">/>
        <RadioGroup
            android:id="@+id/rg_longchose"
            android:layout_width="match_parent"
            android:layout_height="58dp"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:background="@color/zs_zsmytask_grey_bg">
            <RadioButton
                android:id="@+id/rb_restor"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@null"
                android:text="恢复"
                android:drawableTop="@drawable/restore_icon"
                android:gravity="center"
                android:layout_weight="1"
                android:checked="true"
                android:textColor="#2b85d0"
                android:textSize="@dimen/text_15sp"
                android:visibility="gone">
            </RadioButton>
            <RadioButton
                android:id="@+id/rb_againedit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@null"
                android:text="@string/againedit"
                android:drawableTop="@drawable/edit_icon"
                android:gravity="center"
                android:layout_weight="1"
                android:checked="true"
                android:textColor="#2b85d0"
                android:textSize="@dimen/text_15sp"
                android:visibility="gone">
            </RadioButton>

            <RadioButton
                android:id="@+id/rb_longdelete"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:button="@null"
                android:text="删除"
                android:drawableTop="@drawable/long_delete"
                android:gravity="center"
                android:layout_weight="1"
                android:checked="true"
                android:textColor="#2b85d0"
                android:textSize="@dimen/text_15sp">
            </RadioButton>
            <RadioButton
                android:id="@+id/rb_mack"
                style="@style/RadioButtonStyles"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_weight="1"
                android:button="@null"
                android:checked="true"
                android:text="标记"
                android:drawableTop="@drawable/mack_icon"
                android:textColor="#2b85d0"
                android:textSize="@dimen/text_15sp"
                />
        </RadioGroup>
    </RelativeLayout>
</RelativeLayout>

下面是activity代码

/**
 * Created by qln on 2016/7/20.
 * 收件箱界面
 */
@ContentView(R.layout.mailinbox_layout)
public class MailInboxActivity extends Activity implements View.OnClickListener,OnHeaderRefreshListener, OnFooterRefreshListener {
    private ListView mailinbox_lv;
    private TextView tv_choseall,tv_cencal,title_name;
    private RadioButton rb_delete,rb_mack;
    private RelativeLayout rl_blow,rl_search;
    //是否可删除
    private boolean canDel = false;
    private ImageView menu;
    private ImageButton edit;
    private Intent intent;
    private PullToRefreshView pullToRefreshView;
    private QTPageBean<MailList> datas;
    private MailListService mailListService;
    private MailListAdapter adapter;
    private HashMap<String,String> params = new HashMap<>();
    //选中item坐标
    public static List<Integer> selectPosition = new ArrayList<Integer>();
    //菜单点击事件
    private PopupWindow mPopWindow;
    private RelativeLayout mailmanger_writeemail_ll;
    private RelativeLayout mailmanger_inbox_ll;
    private RelativeLayout mailmanger_drafts_rl;
    private RelativeLayout mailmanger_hassent_rl;
    private RelativeLayout mailmanger_delete_rl;
    @ViewInject(R.id.main_title)
    private RelativeLayout main_title;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LogUtils.d(this.getClass().getName() + " create().");
        ViewUtils.inject(this);
        mailListService = new MailListService(this);
        params.put("search_type", MailSearchType.ALL);
        datas = new QTPageBean<MailList>(GlobalContext.HD_REQUEST_COUNT, new IQTPageBeanHelper<MailList>() {
            @Override
            public int getPosition(List<MailList> list, MailList t) {
                int position = -1;
                String id = null;
                for (int i = 0; i < list.size(); i++) {
                    id = t.getEmailId();
                    if (id != null && id.equals(list.get(i).getEmailId())) {
                        position = i;
                    }
                }
                return position;
            }
        });
        initView();
    }
    private void initView() {
        pullToRefreshView = (PullToRefreshView) findViewById(R.id.pull2refresh);
        menu = (ImageView) findViewById(R.id.img_inboxmenu);
        edit = (ImageButton) findViewById(R.id.img_inboxedit);
        tv_choseall = (TextView) findViewById(R.id.tv_choseall);
        tv_cencal = (TextView) findViewById(R.id.tv_cencal);
        title_name = (TextView) findViewById(R.id.title_name);
        rl_blow = (RelativeLayout) findViewById(R.id.rl_longchose);
        rl_blow.setVisibility(View.GONE);
        rl_search = (RelativeLayout) findViewById(R.id.rl_search_edittext);
        rb_delete = (RadioButton) findViewById(R.id.rb_longdelete);
        rb_mack = (RadioButton) findViewById(R.id.rb_mack);
        mailinbox_lv = (ListView) findViewById(R.id.mailinbox_lv);
        mailinbox_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if (canDel) {
                    selectItem(view, position);
                    title_name.setText("已选择" + selectPosition.size() + "封");
                } else {
                    MailList maillist = datas.get(position);
                    String mailId = maillist.getEmailId();
                    LogUtils.d("mailId:" + mailId);
                    intent = new Intent(MailInboxActivity.this, ShowMailActivity.class);
                    intent.putExtra(Ids.MAILID, mailId);
                    intent.putExtra("position", position);
                    intent.putExtra("boxType", MailType.INBOX);
                    LogUtils.d("MailType.INBOX:"+MailType.INBOX);
                    startActivityForResult(intent, 0x123);
                }
            }
        });

        pullToRefreshView.setOnHeaderRefreshListener(this);
        pullToRefreshView.setOnFooterRefreshListener(this);
        rl_search.setOnClickListener(this);
        menu.setOnClickListener(this);
        edit.setOnClickListener(this);
        firstPageDatas();
        clickener();
    }
    /**
     * 加载第一页数据
     */
    private void firstPageDatas() {
        DialogManager.showProgressDialog(this, ProgressDialog.STYLE_SPINNER, "数据加载中。。。", true,
                false, true);
        mailListService.firstPage(datas, GlobalContext.getUrl(R.string.url_mail_index), params, new BaseServiceCallBack<List<MailList>>() {
            @Override
            public void onFailed(int type, String showMessage, String detailMessage) {
                switch (type) {
                    case ServiceCallBack.ERROR_TYPE_SESSION_TIMEOUT:
                        DialogManager.showToast(MailInboxActivity.this, "session超时,请重新登陆");
                        ActivityUtil.reLogin(MailInboxActivity.this);
                        break;
                    case ServiceCallBack.ERROR_TYPE_NODATA:
                        DialogManager.showToast(MailInboxActivity.this, "不存在该信息,请刷新列表");
                        MailInboxActivity.this.finish();
                        break;
                    default:
                        DialogManager.showToast(MailInboxActivity.this, showMessage);
                        break;
                }
            }
            @Override
            public void onSuccess(List<MailList> newsList) {
                if (newsList.size() != 0) {
                    datas.clear();
                    datas.addAll(newsList);
                    refreshAdapter();
                } else {
                    DialogManager.showToast(MailInboxActivity.this, "没有数据");
                }
                DialogManager.closeProgressDialog();
            }
        });
    }
    private void showPopupWindow() {
        //设置contentView
        View contentView = LayoutInflater.from(MailInboxActivity.this).inflate(R.layout.mail_menupopu, null);
        LogUtils.d("contentView:"+contentView);
        mPopWindow = new PopupWindow(contentView, ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT, true);
        mPopWindow.setContentView(contentView);
        //设置这个参数点击外边可消失
        mPopWindow.setBackgroundDrawable(new BitmapDrawable());
        //点击外边窗口消失
        mPopWindow.setOutsideTouchable(true);
        //获得焦点,否则无法点击
        mPopWindow.setFocusable(true);
        //设置各个控件的点击响应
        mailmanger_writeemail_ll = (RelativeLayout)contentView.findViewById(R.id.mailmanger_writeemail_ll);
        mailmanger_inbox_ll = (RelativeLayout)contentView.findViewById(R.id.mailmanger_inbox_ll);
        mailmanger_drafts_rl = (RelativeLayout)contentView.findViewById(R.id.mailmanger_drafts_rl);
        mailmanger_hassent_rl = (RelativeLayout)contentView.findViewById(R.id.mailmanger_hassent_rl);
        mailmanger_delete_rl = (RelativeLayout)contentView.findViewById(R.id.mailmanger_delete_rl);
        mailmanger_writeemail_ll.setOnClickListener(this);
        mailmanger_inbox_ll.setOnClickListener(this);
        mailmanger_drafts_rl.setOnClickListener(this);
        mailmanger_hassent_rl.setOnClickListener(this);
        mailmanger_delete_rl.setOnClickListener(this);
        mPopWindow.showAsDropDown(main_title, 0, 0);
        setBgAlpha(10f);

    }

    public void setBgAlpha(float alpa) {
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.alpha = alpa; // 0.0-1.0
        getWindow().setAttributes(lp);
    }
    private void refreshAdapter() {
        adapter = new MailListAdapter(datas,selectPosition,this, MailType.INBOX);
        adapter.setCanDel(canDel);
        mailinbox_lv.setAdapter(adapter);
        adapter.notifyDataSetChanged();
    }
    @Override
    public void onFooterRefresh(PullToRefreshView view) {
        mailListService.nextPage(datas, GlobalContext.getUrl(R.string.url_mail_index), params, new BaseServiceCallBack<List<MailList>>() {
            @Override
            public void onFailed(int type, String showMessage, String detailMessage) {
                switch (type) {
                    case ServiceCallBack.ERROR_TYPE_SESSION_TIMEOUT:
                        DialogManager.showToast(MailInboxActivity.this, "session超时,请重新登录");
                        break;
                    case ServiceCallBack.ERROR_TYPE_NODATA:
                        DialogManager.showToast(MailInboxActivity.this, "不存在该信息,请刷新列表");
                        MailInboxActivity.this.finish();
                        break;
                    default:
                        DialogManager.showToast(MailInboxActivity.this, showMessage);
                        break;
                }
                pullToRefreshView.onFooterRefreshComplete();
            }

            @Override
            public void onSuccess(List<MailList> newsList) {
                pullToRefreshView.onFooterRefreshComplete();
                if (newsList.size() == 0) {
                    DialogManager.showToast(MailInboxActivity.this, R.string.msg_nodata);
                }
                for (int i = 0; i < newsList.size(); i++) {
                    datas.addTAt(newsList.get(i), datas.size());
                }
                mailinbox_lv.setSelection(datas.size());
            }

            @Override
            public void onStart() {
            }

            @Override
            public void onCancel() {
            }
        });
    }

    private void clickener() {
        mailinbox_lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                menu.setVisibility(View.GONE);
                edit.setVisibility(View.GONE);
                tv_choseall.setVisibility(View.VISIBLE);
                tv_cencal.setVisibility(View.VISIBLE);
                rl_blow.setVisibility(View.VISIBLE);
                //显示删除选项
                canDel = true;
                //锁定数据刷新功能
                pullToRefreshView.lock();
                adapter.setCanDel(canDel);
                adapter.notifyDataSetChanged();
                clicks();
                return true;
            }
        });
    }
    /**
     * 选择item
     * @param view 按下的视图
     * @param position 按下的坐标
     */
    public void selectItem(View view,Integer position){
        if (selectPosition.contains(position)) {
            selectPosition.remove(position);
            adapter.refreshItemSelected(position,mailinbox_lv,false);
        }else{
            selectPosition.add(position);
            adapter.refreshItemSelected(position,mailinbox_lv,true);
        }
    }
    private void clicks() {
        //删除
        rb_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final AlertDialogToast dialog = new AlertDialogToast(MailInboxActivity.this);
                dialog.setTitle(GlobalContext.getStr(R.string.deletetext));
                dialog.setPositiveButton("删除", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (selectPosition.size() == 0) {
                            DialogManager.showToast(MailInboxActivity.this, "没有选择删除项!");
                            return;
                        }
                        StringBuffer mailIds = new StringBuffer();
                        for (int position : selectPosition) {
                            MailList mailList = datas.get(position);
                            mailIds.append(mailList.getEmailId()).append(";");
                        }
                        mailIds.deleteCharAt(mailIds.length() - 1);
                        mailListService.updateMailStatus(GlobalContext.getUrl(R.string.url),
                                mailIds.toString(), MailStatus.TRASH, MailType.INBOX, new BaseServiceCallBack<String>() {
                                    @Override
                                    public void onFailed(int type, String showMessage, String detailMessage) {
                                        super.onFailed(type, showMessage, detailMessage);
                                        switch (type) {
                                            case ServiceCallBack.ERROR_TYPE_SESSION_TIMEOUT:
                                                DialogManager.showToast(MailInboxActivity.this, "session超时,请重新登陆");
                                                ActivityUtil.reLogin(MailInboxActivity.this);
                                                break;
                                            case ServiceCallBack.ERROR_TYPE_NODATA:
                                                DialogManager.showToast(MailInboxActivity.this, "不存在该信息,请刷新列表");
                                                MailInboxActivity.this.finish();
                                                break;
                                            default:
                                                DialogManager.showToast(MailInboxActivity.this, showMessage);
                                                break;
                                        }
                                    }

                                    @Override
                                    public void onSuccess(String s) {
                                        super.onSuccess(s);
                                        Object[] positions = selectPosition.toArray();
                                        Arrays.sort(positions);
                                        for (int i = positions.length - 1; i >= 0; i--) {
                                            datas.removeAt((int) positions[i]);
                                        }
                                        selectPosition.clear();
                                        adapter.notifyDataSetChanged();
                                        title_name.setText("已选择" + selectPosition.size() + "封");
                                    }
                                });
                        dialog.dismiss();
                    }
                });
                dialog.setNegativeButton("取消", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                }
        });
        //全选
        tv_choseall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                selectPosition.clear();
                for(int i = 0; i < datas.size(); i ++){
                    selectPosition.add(i);
                    adapter.refreshItemSelected(i,mailinbox_lv,true);
                }
                title_name.setText("已选择"+ selectPosition.size()+"封");
            }
        });
        //取消
        tv_cencal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_choseall.setVisibility(View.GONE);
                rl_blow.setVisibility(View.GONE);
                tv_cencal.setVisibility(View.GONE);
                menu.setVisibility(View.VISIBLE);
                edit.setVisibility(View.VISIBLE);
                //取消删除选项
                canDel = false;
                pullToRefreshView.unlock();
                adapter.setCanDel(canDel);
                adapter.notifyDataSetChanged();
                selectPosition.clear();
                title_name.setText(GlobalContext.getStr(R.string.mail_inbox));
            }
        });
    }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值