/* * The MIT License (MIT) * * Copyright (c) 2014-2015 Umeng, Inc * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package com.umeng.comm.ui.adapters; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import com.umeng.comm.core.constants.Constants; import com.umeng.comm.core.imageloader.UMImageLoader; import com.umeng.comm.core.sdkmanager.ImageLoaderManager; import com.umeng.comm.core.utils.ToastMsg; import com.umeng.comm.ui.adapters.viewholders.ImagePickerGvViewHolder; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; /** * 在发布feed时选择图片的GridView适配器,选中图片的CheckBox会打上标识. */ public class ImagePickerGvAdapter extends CommonAdapter<String, ImagePickerGvViewHolder> { /** * 存储被选中的图片地址 */ private List<String> mSelectImagePaths = new ArrayList<String>(); private UMImageLoader mImageLoader = null; private ImagePickerGvViewHolder mCurrentHolder = null; /** * 最大被选中的图片数目。目前最大选中图片数不能超过9张 */ private static final int MAX_IMAGE_NUM = 9; /** * @param context * @param list 所有图片的列表 * @param selectedImagePaths 已选中的图片列表 */ public ImagePickerGvAdapter(Context context, Set<String> selectedImagePaths) { super(context); if (selectedImagePaths != null) { mSelectImagePaths.addAll(selectedImagePaths); } mImageLoader = ImageLoaderManager.getInstance().getCurrentSDK(); } @Override protected ImagePickerGvViewHolder createViewHolder() { return new ImagePickerGvViewHolder(); } /** * 获取所有选中的图片地址</br> * * @return 所有选择图片的地址 */ public List<String> getSelectImagePaths() { return mSelectImagePaths; } public void setSelectedImagePaths(Collection<String> paths) { mSelectImagePaths.clear(); mSelectImagePaths.addAll(paths); } protected void setItemData(int position, ImagePickerGvViewHolder holder, View rootView) { mCurrentHolder = holder; final String item = getItem(position); holder.imageView.setTag(item); displayImage(item); dealCheckBoxLogic(rootView, item); } private void displayImage(String url) { mImageLoader.displayImage(url, mCurrentHolder.imageView); mImageLoader.resume(); } private void dealCheckBoxLogic(View rootView, final String url) { final CheckBox tmpCheckBox = mCurrentHolder.checkBox; // 点击每项的事件 rootView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { clickItemView(tmpCheckBox, url); } }); // 如果是列表中包含该路径,那么代表该项为选中的. tmpCheckBox.setChecked(mSelectImagePaths.contains(url)); } private void clickItemView(CheckBox tmpCheckBox, String url) { boolean status = tmpCheckBox.isChecked(); if (!status) { // 此时被选中 if (mSelectImagePaths.size() >= MAX_IMAGE_NUM) { if (!mSelectImagePaths.contains(Constants.ADD_IMAGE_PATH_SAMPLE)) { ToastMsg.showShortMsgByResName("umeng_comm_image_overflow"); return; } mSelectImagePaths.remove(Constants.ADD_IMAGE_PATH_SAMPLE); } // 如果“+图片”存在且在末尾,则将新增的图片放在“+图片”的前面 mSelectImagePaths.add(url); int index = mSelectImagePaths.indexOf(Constants.ADD_IMAGE_PATH_SAMPLE); if (index >= 0 && index != mSelectImagePaths.size() - 1) { mSelectImagePaths.add(mSelectImagePaths.remove(index)); } } else { // 取消选中的图片 mSelectImagePaths.remove(url); } tmpCheckBox.setChecked(!status); } }