package com.netease.nim.uikit.common.media.picker.fragment; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.GridView; import com.netease.nim.uikit.R; import com.netease.nim.uikit.common.fragment.TFragment; import com.netease.nim.uikit.common.media.picker.adapter.PickerPhotoAdapter; import com.netease.nim.uikit.common.media.picker.model.PhotoInfo; import com.netease.nim.uikit.session.constant.Extras; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class PickerImageFragment extends TFragment implements OnItemClickListener { public interface OnPhotoSelectClickListener { public void onPhotoSelectClick(PhotoInfo selectPhoto); public void onPhotoSingleClick(List<PhotoInfo> photos, int position); } private GridView pickerImageGridView; private OnPhotoSelectClickListener onPhotoSelectClickListener; private List<PhotoInfo> photoList; private PickerPhotoAdapter photoAdapter; private boolean isMutiMode; private int mutiSelectLimitSize; public PickerImageFragment() { this.setContainerId(R.id.picker_photos_fragment); } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (onPhotoSelectClickListener == null) { onPhotoSelectClickListener = (OnPhotoSelectClickListener) activity; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.nim_picker_images_fragment, container, false); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); proceedExtra(); findViews(); } private void proceedExtra() { Bundle bundle = getArguments(); photoList = new ArrayList<PhotoInfo>(); photoList.addAll(getPhotos(bundle)); isMutiMode = bundle.getBoolean(Extras.EXTRA_MUTI_SELECT_MODE); mutiSelectLimitSize = bundle.getInt(Extras.EXTRA_MUTI_SELECT_SIZE_LIMIT, 9); } private void findViews() { pickerImageGridView = findView(R.id.picker_images_gridview); photoAdapter = new PickerPhotoAdapter(getActivity(), photoList, pickerImageGridView, isMutiMode, 0, mutiSelectLimitSize); pickerImageGridView.setAdapter(photoAdapter); pickerImageGridView.setOnItemClickListener(this); } public void resetFragment(List<PhotoInfo> list, int hasSelect){ pickerImageGridView.setAdapter(null); if(photoList == null){ photoList = new ArrayList<PhotoInfo>(); }else{ photoList.clear(); } if(list != null){ photoList.addAll(list); } photoAdapter = new PickerPhotoAdapter(getActivity(), photoList, pickerImageGridView, isMutiMode, hasSelect, mutiSelectLimitSize); pickerImageGridView.setAdapter(photoAdapter); } public void updateGridview(List<PhotoInfo> list){ if(list == null) return; for (int i =0; i< list.size(); i++) { PhotoInfo info = list.get(i); int imageID = info.getImageId(); boolean choose = info.isChoose(); for(int j = 0; j < photoList.size();j++){ PhotoInfo phone = photoList.get(j); if(phone.getImageId() == imageID){ phone.setChoose(choose); break; } } } if(photoAdapter != null){ photoAdapter.notifyDataSetChanged(); } } public void updateSelectedForAdapter(int hasSelectNum){ if(photoAdapter != null){ photoAdapter.updateSelectNum(hasSelectNum); } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { onPhotoSelectClickListener.onPhotoSingleClick(photoList, position); } public List<PhotoInfo> getPhotos(Bundle bundle) { return toPhotos(bundle.getSerializable(Extras.EXTRA_PHOTO_LISTS)); } @SuppressWarnings("unchecked") private List<PhotoInfo> toPhotos(Serializable sPhotos) { if (sPhotos != null && sPhotos instanceof List<?>) { return (List<PhotoInfo>) sPhotos; } return null; } }