PullToRefreshListView listview 单选多选

本文讲解如何实现PullToRefreshListView的多选,实现全选,取消全选功能. 同样也适用于普通的listview。

PullToRefreshListView与普通的listview的区别是:PullToRefreshListView在显示页面上,第一个可见的item的position是从 1开始的,因为PullToRefreshListView是拥有头布局的;

listview自带单选多选模式

//CHOICE_MODE_NONE
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
首先声明一个list用来存放选择的item的posting

// position虽然是int型的,但这里将他的position转换成String来保存
// 因为item的position和 list的position容易搞混;
List<String> chooseIdList=new ArrayList<String>();
listview的item点击事件就会触发 选择事件,所以操作一般可以放到onItemClick事件里面,每次选中后调用 adapter.notifyDataSetChanged();方法,然后adapter 里面根据一个item的是否选中状态来改变他的样式,代码在后面贴出

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                
                    //点击后,如果这个item是选中状态
                    if(listView.isItemChecked(position)){
                        // 将这个item 的position添加到 list中去
                        chooseIdList.add(position+"");
                        //判断所有的是否都已经选中了
                        if(chooseIdList.size() == adapter.getCount()){
                            //全部都是选中状态,根据业务,做相关操作
                            tv_chooseAll.setText("取消全选");
                        }
                    }else {
                        chooseIdList.remove(position+"");
                        if(chooseIdList.size() < adapter.getCount()){
                            tv_chooseAll.setText("全选");
                        }
                    }
                    adapter.notifyDataSetChanged();
                }
            });
一般还带有一个全选和取消全选的按钮,下面来设置他的点击事件

case R.id.tv_chooseAll:
            
                //全选的事件
                if("全选".equals(tv_chooseAll.getText())){
                    //提取的全选具体事件
                    selectedAll();
                    tv_chooseAll.setText("取消全选");
                    return;
                }
                
                //取消全选的事件
                if("取消全选".equals(tv_chooseAll.getText())){
                    unSelectedAll();
                    tv_chooseAll.setText("全选");
                    return;
                }
                break;
全选 和 取消全选的具体实现

public void selectedAll(){
        //先清空所有选中列表,防止重复
        chooseIdList.clear();
        for(int i=0;i<adapter.getCount();i++){
            listView.setItemChecked((i+1), true);
            adapter.notifyDataSetChanged();
            chooseIdList.add((i+1)+"");
        }
      //  updateSeletedCount();
    }

    public void unSelectedAll(){
        listView.clearChoices();
        chooseIdList.clear();
        adapter.notifyDataSetChanged();
    //    updateSeletedCount();
    }
这里调用过了adapter.notifyDataSetChanged();

public void updateBackground(int position, ImageView view) {
        int backgroundId;
        if (mListView.isItemChecked(position)) {
//            backgroundId = R.drawable.list_selected_holo_light;
            //设置选中的样式
            view.setImageDrawable(context.getResources().getDrawable(R.drawable.pay_check_24px));
//            MyToast.show(context,"adapter :"+position);
//            Log.i("sinstar", "adapter: "+position+"选中");
        } else {
//            backgroundId = R.drawable.conversation_item_background_read;
            // 设置没选中的样式
            view.setImageDrawable(context.getResources().getDrawable(R.drawable.shape_oval_not_choose));
            Log.i("sinstar", "adapter: "+position+"没选中");
        }
    }
然后在getView里面调用

updateBackground(i+1 , viewHolder.img_shop_choose);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值