Hello Friends,
Today I am going to share my another android tutorial, with the help
of this we can easily create a Recyclerview with multiple different types
of view .
Also this tutorial helps you to create a View pager inside RecyclerView,

1. MainActivity.java :
Today I am going to share my another android tutorial, with the help
of this we can easily create a Recyclerview with multiple different types
of view .
Also this tutorial helps you to create a View pager inside RecyclerView,

1. MainActivity.java :
- package com.developer.solutions.recyclerviewwithmultipleviewtype.activity;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Binder;
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.DefaultItemAnimator;
- import android.support.v7.widget.LinearLayoutCompat;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.OrientationHelper;
- import android.support.v7.widget.RecyclerView;
- import android.support.v7.widget.Toolbar;
- import android.widget.TextView;
- import com.developer.solutions.recyclerviewwithmultipleviewtype.R;
- import com.developer.solutions.recyclerviewwithmultipleviewtype.adapter.MultiViewTypeAdapter;
- import com.developer.solutions.recyclerviewwithmultipleviewtype.model.Data;
- import java.util.ArrayList;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import butterknife.Unbinder;
- /**
- * Created by Mukesh on 3/8/17.
- * himky02@gmail.com
- */
- public class MainActivity extends AppCompatActivity {
- Activity mActivity;
- @BindView(R.id.toolbar)
- Toolbar toolbar;
- @BindView(R.id.rv)
- RecyclerView mRecyclerView;
- Unbinder mUnbinder;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- //((TextView) findViewById(R.id.tv)).setText("Welcome user");
- mUnbinder = ButterKnife.bind(this);
- ArrayList<data> list = new ArrayList<>();
- list.add(new Data(Data.VIEW_PAGER, "Hello. This is the View Pager view type with images", 0));
- list.add(new Data(Data.IMAGE_TYPE, "A view type with Image and Textview", R.drawable.disneys_cinderella));
- list.add(new Data(Data.AUDIO_TYPE, "Hey, A view type with Button and Textview", 0));
- list.add(new Data(Data.IMAGE_TYPE, "Hi again. A view with Image and Textview", R.drawable.snow));
- MultiViewTypeAdapter adapter = new MultiViewTypeAdapter(list, this);
- final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
- linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
- mRecyclerView.setLayoutManager(linearLayoutManager);
- mRecyclerView.setItemAnimator(new DefaultItemAnimator());
- mRecyclerView.setAdapter(adapter);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (mUnbinder != null) mUnbinder.unbind();
- }
- }
- </data>
2.MultiViewTypeAdapter.java
- package com.developer.solutions.recyclerviewwithmultipleviewtype.adapter;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Color;
- import android.os.Handler;
- import android.support.v4.view.ViewPager;
- import android.support.v7.widget.RecyclerView;
- import android.text.Html;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.LinearLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.developer.solutions.recyclerviewwithmultipleviewtype.R;
- import com.developer.solutions.recyclerviewwithmultipleviewtype.model.Data;
- import java.util.ArrayList;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- /**
- * Created by Mukesh on 3/8/17.
- * himky02@gmail.com
- */
- public class MultiViewTypeAdapter extends RecyclerView.Adapter<recyclerview .viewholder=""> {
- private ArrayList<data> dataSet;
- Context mContext;
- int total_types;
- ArrayList<string> slider_image_list;
- int page = 0;
- public static class TextTypeViewHolder extends RecyclerView.ViewHolder {
- @BindView(R.id.ll_dots)
- LinearLayout ll_dots;
- @BindView(R.id.vp_slider)
- ViewPager mvViewPager;
- public TextTypeViewHolder(View itemView) {
- super(itemView);
- ButterKnife.bind(this, itemView);
- }
- }
- public static class ImageTypeViewHolder extends RecyclerView.ViewHolder {
- @BindView(R.id.type)
- TextView tvtype;
- @BindView(R.id.img)
- ImageView iv;
- public ImageTypeViewHolder(View itemView) {
- super(itemView);
- ButterKnife.bind(this, itemView);
- }
- }
- public static class ButtonTypeViewHolder extends RecyclerView.ViewHolder {
- @BindView(R.id.type)
- TextView type;
- @BindView(R.id.btn)
- Button btn;
- public ButtonTypeViewHolder(View itemView) {
- super(itemView);
- ButterKnife.bind(this, itemView);
- }
- }
- public MultiViewTypeAdapter(ArrayList<data> data, Context context) {
- this.dataSet = data;
- this.mContext = context;
- total_types = dataSet.size();
- }
- @Override
- public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view;
- switch (viewType) {
- case Data.VIEW_PAGER:
- view = LayoutInflater.from(parent.getContext()).inflate(R.layout.viewpager, parent, false);
- return new TextTypeViewHolder(view);
- case Data.IMAGE_TYPE:
- view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_image_type, parent, false);
- return new ImageTypeViewHolder(view);
- case Data.AUDIO_TYPE:
- view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_button_type, parent, false);
- return new ButtonTypeViewHolder(view);
- }
- return null;
- }
- @Override
- public int getItemViewType(int position) {
- switch (dataSet.get(position).type) {
- case 0:
- return Data.VIEW_PAGER;
- case 1:
- return Data.IMAGE_TYPE;
- case 2:
- return Data.AUDIO_TYPE;
- default:
- return -1;
- }
- }
- @Override
- public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int listPosition) {
- Data object = dataSet.get(listPosition);
- if (object != null) {
- switch (object.type) {
- case Data.VIEW_PAGER:
- //((TextTypeViewHolder) holder).type.setText(object.text);
- slider_image_list = new ArrayList<>();
- //Add few items to slider_image_list ,this should contain url of images which should be displayed in slider
- // here i am adding few sample image links, you can add your own
- slider_image_list.add("http://cdn.collider.com/wp-content/uploads/avengers-movie-banner-scarlett-johansson-jeremy-renner.jpg");
- slider_image_list.add("http://www.officialterridwyer.com/wp-content/uploads/2015/04/Disneys-Cinderella-2015-Movie-Banner.jpg");
- slider_image_list.add("http://igmedia.blob.core.windows.net/igmedia/hindi/gallery/movies/raabta/main1.jpg");
- slider_image_list.add("http://fantoosy.com/wp-content/uploads/2015/11/tamasha.jpg");
- final SliderPagerAdapter sliderPagerAdapter = new SliderPagerAdapter((Activity) mContext, slider_image_list);
- ((TextTypeViewHolder) holder).mvViewPager.setAdapter(sliderPagerAdapter);
- ((TextTypeViewHolder) holder).mvViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- }
- @Override
- public void onPageSelected(int position) {
- addBottomDots(position, ((TextTypeViewHolder) holder).ll_dots);
- page = position;
- }
- @Override
- public void onPageScrollStateChanged(int state) {
- }
- });
- addBottomDots(0, ((TextTypeViewHolder) holder).ll_dots);
- final Handler h = new Handler();
- h.postDelayed(new Runnable() {
- @Override
- public void run() {
- if (sliderPagerAdapter.getCount() == page) {
- page = 0;
- } else {
- page++;
- }
- ((TextTypeViewHolder) holder).mvViewPager.setCurrentItem(page);
- h.postDelayed(this, 2000);
- }
- }, 1000);
- break;
- case Data.IMAGE_TYPE:
- ((ImageTypeViewHolder) holder).tvtype.setText(object.text);
- ((ImageTypeViewHolder) holder).iv.setImageResource(object.data);
- break;
- case Data.AUDIO_TYPE:
- ((ButtonTypeViewHolder) holder).type.setText(object.text);
- ((ButtonTypeViewHolder) holder).btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Toast.makeText(mContext, "You clicked!!!", Toast.LENGTH_SHORT).show();
- }
- });
- break;
- }
- }
- }
- @Override
- public int getItemCount() {
- return dataSet.size();
- }
- //showing dots on screen
- private void addBottomDots(int currentPage, LinearLayout ll_dots) {
- TextView[] dots = new TextView[slider_image_list.size()];
- ll_dots.removeAllViews();
- for (int i = 0; i < dots.length; i++) {
- dots[i] = new TextView(mContext);
- dots[i].setText(Html.fromHtml("•"));
- dots[i].setTextSize(35);
- dots[i].setTextColor(Color.parseColor("#343434"));
- ll_dots.addView(dots[i]);
- }
- if (dots.length > 0)
- dots[currentPage].setTextColor(Color.parseColor("#A2A2A2"));
- }
- }
- </data></string></data></recyclerview>
Hope this will helps some one.
Enjoy Coding....
How i do i get child of recyclerview is viewpager which hold fragment image?
ReplyDelete