Skip to content

Instantly share code, notes, and snippets.

@snehazanzane
Created May 7, 2018 10:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snehazanzane/8ffe26187f2b054befc2f262acdc0f73 to your computer and use it in GitHub Desktop.
Save snehazanzane/8ffe26187f2b054befc2f262acdc0f73 to your computer and use it in GitHub Desktop.
ViewPager using ViewHolder like RecyclerView : Following code is use for create ViewHolder of ViewPager with Multiple ViewType
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.LinkedList;
import java.util.Queue;
public abstract class RecycledPagerAdapter<VH extends RecycledPagerAdapter.ViewHolder> extends PagerAdapter {
public static abstract class ViewHolder {
final View itemView;
public ViewHolder(View itemView) {
this.itemView = itemView;
}
}
Queue<VH> destroyedItems = new LinkedList<>();
@Override
public final Object instantiateItem(ViewGroup container, int position) {
VH viewHolder = destroyedItems.poll();
viewHolder = (VH) onCreateViewHolder(container,getItemViewType(position));
onBindViewHolder(viewHolder, position);
container.addView(viewHolder.itemView);
return viewHolder;
}
@Override
public final void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(((VH) object).itemView);
destroyedItems.add((VH) object);
}
@Override
public final boolean isViewFromObject(View view, Object object) {
return ((VH) object).itemView == view;
}
/**
* Create a new view holder
* @param parent
* @return view holder
*/
public abstract ViewHolder onCreateViewHolder(ViewGroup parent, int viewType);
/**
* Bind data at position into viewHolder
* @param viewHolder
* @param position
*/
public abstract void onBindViewHolder(VH viewHolder, int position);
/**
* get Item Type
* @param position
*/
public abstract int getItemViewType(int position);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ScrollView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class ViewPagerRecyclerAdapter extends RecycledPagerAdapter<RecycledPagerAdapter.ViewHolder> {
Context mContext;
LayoutInflater mLayoutInflater;
private List<Model> arr;
private LayoutInflater layoutInflater;
public ViewPagerRecyclerAdapter(Context context, ArrayList<Model> arr) {
mContext = context;
this.arr = arr;
mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (layoutInflater == null) {
layoutInflater = LayoutInflater.from(parent.getContext());
}
View v = null;
switch (viewType) {
case 1:
// Inflate view
v = layoutInflater.inflate(R.layout.view_pager_item, parent, false);
// Return view holder
return new TextScrollViewHolder(v);
case 2:
// Inflate view
v = layoutInflater.inflate(R.layout.view_pager_image_item, parent, false);
// Return view holder
return new ImageViewHolder(v);
default:
// Inflate view
v = layoutInflater.inflate(R.layout.view_pager_image_item, parent, false);
// Return view holder
return new ImageViewHolder(v);
}
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
System.out.println("View : "+position+" - type:"+arr.get(position).getType());
switch (arr.get(position).getType()) {
case 1:
if (arr.get(position).isTextShow()) {
((TextScrollViewHolder) viewHolder).scrollView.setVisibility(View.VISIBLE);
} else {
((TextScrollViewHolder) viewHolder).scrollView.setVisibility(View.GONE);
}
((TextScrollViewHolder) viewHolder).img.setImageResource(arr.get(position).getImg());
break;
default:
((ImageViewHolder) viewHolder).img.setImageResource(arr.get(position).getImg());
((ImageViewHolder) viewHolder).txtTlt.setText("View " + position);
break;
}
}
@Override
public int getItemViewType(int position) {
return arr.get(position).getType();
}
@Override
public int getCount() {
return arr.size();
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
// TODO: optional callback when current object has changed
}
public static class TextScrollViewHolder extends RecycledPagerAdapter.ViewHolder {
ScrollView scrollView;
ImageView img;
ImageView btnNext;
public TextScrollViewHolder(View v) {
super(v);
scrollView = (ScrollView) itemView.findViewById(R.id.scrollview);
img = (ImageView) itemView.findViewById(R.id.imageView);
btnNext = (ImageView) itemView.findViewById(R.id.btnNext);
// TODO: use findViewById or Butterknife
}
}
public static class ImageViewHolder extends RecycledPagerAdapter.ViewHolder {
TextView txtTlt;
ImageView img;
public ImageViewHolder(View v) {
super(v);
img = (ImageView) itemView.findViewById(R.id.img_ViewPagerImageItem);
txtTlt = (TextView) itemView.findViewById(R.id.txtTlt_ViewPagerImageItem);
// TODO: use findViewById or Butterknife
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment