Skip to content

Instantly share code, notes, and snippets.

@SehoNoh
Created August 16, 2014 11:23
Show Gist options
  • Save SehoNoh/a05603f77b408820cc64 to your computer and use it in GitHub Desktop.
Save SehoNoh/a05603f77b408820cc64 to your computer and use it in GitHub Desktop.
ListView ViewPager
package com.artsquare.android.ui;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.artsquare.android.R;
import com.artsquare.android.common.UserSession;
import com.artsquare.android.model.PhotoModel;
import com.artsquare.android.util.NewsfeedCallBack;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import java.util.ArrayList;
public class NewsfeedAdapter extends ArrayAdapter<PhotoModel> implements NewsfeedCallBack {
private Activity activity;
private Context context;
private int adapterViewItemId;
private ArrayList<PhotoModel> items;
private DisplayImageOptions profileOptions, artOptions;
private ImageLoader loader = ImageLoader.getInstance();
// private SparseArray<WeakReference<View>> viewArray;
@Override
public void itemClicked(final int index, final int position) {
long idx = items.get(index).getIdx();
UserSession.getInstance().setCurrentIndex(idx);
UserSession.getInstance().setCurrentPosition(position);
getContext().startActivity(new Intent(activity, DetailViewActivity.class));
}
public NewsfeedAdapter(Activity activity, int adapterViewItemId, ArrayList<PhotoModel> items) {
super(activity, adapterViewItemId, items);
this.context = activity;
this.activity = activity;
this.adapterViewItemId = adapterViewItemId;
this.items = items;
// this.viewArray = new SparseArray<WeakReference<View>>(items.size());
profileOptions = new DisplayImageOptions.Builder()
// .showImageOnLoading(R.drawable.ic_stub)
// .showImageForEmptyUri(R.drawable.ic_empty)
// .showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.displayer(new RoundedBitmapDisplayer(100))
.build();
artOptions = new DisplayImageOptions.Builder()
// .showImageOnLoading(R.drawable.ic_stub)
// .showImageForEmptyUri(R.drawable.ic_empty)
// .showImageOnFail(R.drawable.ic_error)
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.build();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View root = convertView;
final ViewHolder holder;
final PhotoModel data = items.get(position);
if (root == null) {
root = LayoutInflater.from(context).inflate(adapterViewItemId, parent, false);
holder = new ViewHolder();
holder.ivProfile = (ImageView) root.findViewById(R.id.newsfeed_list_item_iv_profile);
holder.fixedViewPager = (FixedViewPager) root.findViewById(R.id.newsfeed_list_pager);
holder.tvName = (TextView) root.findViewById(R.id.newsfeed_list_item_tv_name);
holder.tvHeart = (TextView) root.findViewById(R.id.newsfeed_list_item_tv_heart);
holder.tvComments = (TextView) root.findViewById(R.id.newsfeed_list_item_tv_comments);
root.setTag(holder);
} else {
holder = (ViewHolder) root.getTag();
}
if (data != null) {
if (holder.ivProfile != null) {
loader.displayImage(data.getOwnerImg(), holder.ivProfile,
profileOptions, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
}
@Override
public void onLoadingCancelled(String s, View view) {
}
}
);
}
if (holder.fixedViewPager != null) {
holder.fixedViewPager.setPageMargin(context.getResources().getDimensionPixelOffset(R.dimen.test));
holder.fixedViewPager.setAdapter(new NewsfeedPagerAdapter(getContext(), data.getPhotos(), this, position));
holder.fixedViewPager.requestDisallowInterceptTouchEvent(false);
holder.fixedViewPager.setOffscreenPageLimit(items.size());
}
// if (holder.viewPager != null) {
// holder.viewPager.setItems(data.getPhotos());
// }
// if (holder.ivContent != null) {
// ImageLoader.getInstance().displayImage(data.getPhotos().get(0), holder.ivContent, artOptions,
// new ImageLoadingListener() {
// @Override
// public void onLoadingStarted(String s, View view) {
// holder.progressBar.setVisibility(View.VISIBLE);
// }
//
// @Override
// public void onLoadingFailed(String s, View view, FailReason failReason) {
// holder.progressBar.setVisibility(View.GONE);
// }
//
// @Override
// public void onLoadingComplete(String s, View view, Bitmap bitmap) {
// holder.progressBar.setVisibility(View.GONE);
// }
//
// @Override
// public void onLoadingCancelled(String s, View view) {
// holder.progressBar.setVisibility(View.GONE);
// }
// }
// );
// }
if (holder.tvName != null) {
holder.tvName.setText(data.getOwnerName());
}
if (holder.tvComments != null) {
holder.tvComments.setText(String.valueOf(data.getCommentCnt()));
}
}
// if (viewArray != null && viewArray.get(position) != null) {
// root = viewArray.get(position).get();
// if (root != null)
// return root;
// }
try {
ImageView logoView = (ImageView) root.findViewById(R.id.newsfeed_list_item_iv_profile);
loader.displayImage(data.getOwnerImg(), holder.ivProfile,
profileOptions, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
}
@Override
public void onLoadingCancelled(String s, View view) {
}
}
);
} finally {
// viewArray.put(position, new WeakReference<View>(root));
}
return root;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
public void update() {
// viewArray.clear();
notifyDataSetChanged();
}
private static class ViewHolder {
ImageView ivProfile;
// ImageView ivContent;
TextView tvName;
// ProgressBar progressBar;
// NewsfeedViewPager viewPager;
FixedViewPager fixedViewPager;
TextView tvHeart;
TextView tvComments;
}
}
package com.artsquare.android.ui;
import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import com.artsquare.android.R;
import com.artsquare.android.util.NewsfeedCallBack;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import java.util.ArrayList;
public class NewsfeedPagerAdapter extends PagerAdapter {
private final static String TAG = NewsfeedViewPager.class.getSimpleName();
private Context context;
private ArrayList<String> urls;
private NewsfeedCallBack callBack;
private int idx;
public NewsfeedPagerAdapter(Context context, ArrayList<String> urls, NewsfeedCallBack callBack, int idx) {
this.context = context;
this.urls = urls;
this.callBack = callBack;
this.idx = idx;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return urls.size();
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
LayoutInflater inflater = LayoutInflater.from(context);
final View root = inflater.inflate(R.layout.newsfeed_viewpager_item, container, false);
final ImageView imageView = (ImageView) root.findViewById(R.id.pager_iv);
final LinearLayout progressLayout = (LinearLayout) root.findViewById(R.id.loading_progress_layout);
final ProgressBar progressBar = (ProgressBar) root.findViewById(R.id.loading_progress_bar);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
ImageLoader.getInstance().displayImage(urls.get(position), imageView, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
progressLayout.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.VISIBLE);
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
progressLayout.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
progressLayout.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
}
@Override
public void onLoadingCancelled(String s, View view) {
progressLayout.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
}
});
container.addView(root, 0);
root.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i(TAG, "Index : " + idx);
callBack.itemClicked(idx, position);
}
});
return root;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view.equals(o);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment