package com.maksym.ABSPager; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.*; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.ImageLoadingListener; import com.nostra13.universalimageloader.core.assist.SimpleImageLoadingListener; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; public class ListViewImageAdapter extends ArrayAdapter<GoogleImageBean> { public ArrayList<GoogleImageBean> listImages; private static LayoutInflater inflater=null; public ImageLoader imageLoader; DisplayImageOptions options; private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener(); Context context; public ListViewImageAdapter(Context context, int resource, ArrayList<GoogleImageBean> objects) { super(context, resource, objects); options = new DisplayImageOptions.Builder() .showStubImage(R.drawable.ic_stub) .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .cacheInMemory(true) .cacheOnDisc(true) .displayer(new RoundedBitmapDisplayer(20)) .build(); this.listImages = objects; inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); imageLoader = ImageLoader.getInstance(); // Получили экземпляр imageLoader.init(ImageLoaderConfiguration.createDefault(context)); // Проинициализировали конфигом по умолчанию this.context=context; } public int getCount() { return listImages.size(); } public GoogleImageBean getItem(int position) { return listImages.get(position); } public long getItemId(int position) { return position; } public static class ViewHolder{ protected ImageView imgViewImage; protected TextView txtViewTitle; protected CheckBox favCheckBox; } public View getView(int position, View convertView, ViewGroup parent) { View vi=convertView; final ViewHolder holder; final int _position=position; if(convertView==null){ vi = inflater.inflate(R.layout.searchlistview_row, parent, false); holder=new ViewHolder(); holder.imgViewImage=(ImageView)vi.findViewById(R.id.elImageView); holder.txtViewTitle=(TextView)vi.findViewById(R.id.titleTextView); holder.favCheckBox=(CheckBox) vi.findViewById(R.id.likeChBox); vi.setTag(holder); } else holder=(ViewHolder)vi.getTag(); holder.favCheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { GoogleImageBean element = listImages.get(_position); element.setFavorite(holder.favCheckBox.isChecked()); notifyDataSetChanged(); } }); holder.imgViewImage .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(listImages.get(_position).getUrl()); } }); GoogleImageBean imageBean = (GoogleImageBean) listImages.get(position); imageLoader.displayImage(imageBean.getThumbUrl(), holder.imgViewImage, options, animateFirstListener); holder.txtViewTitle.setText(Html.fromHtml(imageBean.getTitle())); holder.favCheckBox.setChecked(imageBean.getFavorite()); return vi; } private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { if (loadedImage != null) { ImageView imageView = (ImageView) view; boolean firstDisplay = !displayedImages.contains(imageUri); if (firstDisplay) { FadeInBitmapDisplayer.animate(imageView, 500); displayedImages.add(imageUri); } } } } void showDialog(String image_url) { if (getContext() instanceof FragmentActivity) { // We can get the fragment manager SherlockFragmentActivity activity = (SherlockFragmentActivity) context; FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction(); DialogFragment newFragment = MyDialogFragment.newInstance(image_url); newFragment.show(ft, "dialog"); } } }