效果
最多选择6张
借鉴 https://blog.csdn.net/lizubing1992/article/details/80453893
还有一个简书的大佬不过你把那一篇删了(找不到你了)
/*
* @param position 接口回调之前原数组的下标
* @param delete 是否可以删除
* @param content 内容
* @param picCount 现在数组下标的长度
* */
@Override
public void listener(int position, boolean delete, String content, int picCount) { //从Adapter中回调过来的接口
if (!delete) { //表示选中
maxIndex += 1;
mList.get(position).setShow(true); //显示
mList.get(position).setUploadIndex(picCount); //这里可以填为maxIndex
mChooseList.add(content); //添加内容到当前Activity的list中
} else { //表示当前被反选
mList.get(position).setShow(false); //取消
deleteListPosition(content); //删除当前Activity中的list元素
//核心代码如下
int currentIndex; //声明变量(当前选中的数字)
currentIndex = mList.get(position).getUploadIndex(); //赋值
if (currentIndex < maxIndex) { //这里表示如果不是按照顺序去反选的话(例如 1 2 3 不是按照 3 2 1这样去反选) 需要去让数字发生改变
for (int i = 0; i < mList.size(); i++) { //遍历集合
int index = mList.get(i).getUploadIndex(); //获得每个元素的数字
if (index != 0 && index > currentIndex) { //如果当前元素中的数字小于点击元素的数字 则需要这些元素自减(例如 1 2 3 我点击了2 1不用变化 而3需要自减)
index -= 1;
mList.get(i).setUploadIndex(index);
}
}
}
mList.get(position).setUploadIndex(0); //置为0
maxIndex -= 1;
}
/*----------------------下面是常规操作----------------------*/
mChecked.setText("已选" + mChooseList.size() + "/6");
noChoose.setVisibility(mChooseList.size() > 0 ? View.GONE : View.VISIBLE);
llChoose.setVisibility(mChooseList.size() > 0 ? View.VISIBLE : View.GONE);
if (mChooseList.size() == 0) {
mChooseList.clear();
}
mChooseAdapter.notifyDataSetChanged();
mAdapter.notifyDataSetChanged();
}
源码考虑发布到github上 要是需要看的人多的话 (没有就算了)