本文讲解如何实现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);