Created
May 7, 2018 10:28
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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