Moudiz
Moudiz

Reputation: 7377

How to implement 2 or more recyIclerview in an activity

How to implement 2 or more recyIclerview in an activity ? I am trying to implement 2 or more recyclerview in my activity

in this code line I am declaring the first adapter

private RecyclerView.Adapter mAdapter;

how to declare my second adapter?

by the way while running my app with the below code , the recyclerview is not scrolling and displaying correcly

mainactivity

 private RecyclerView mRecyclerView;
    private RecyclerView mRecyclerView1;

    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private static String LOG_TAG = "RecyclerViewActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_recycler_view);
//first recycler
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        mRecyclerView.setHasFixedSize(true);
       // LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        mLayoutManager = new 

    LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false);
            mRecyclerView.setLayoutManager(mLayoutManager);
            mAdapter = new MyAdapter(getDataSet());
            mRecyclerView.setAdapter(mAdapter);
            RecyclerView.ItemDecoration itemDecoration =
                    new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
            mRecyclerView.addItemDecoration(itemDecoration);
    //second recycler
            mRecyclerView1 = (RecyclerView) findViewById(R.id.my_recycler_view1);
            mRecyclerView1.setHasFixedSize(true);
             LinearLayoutManager mLayoutManager1 = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
            mRecyclerView1.setLayoutManager(mLayoutManager1);
           // mAdapter1 = new MyAdapter1(getDataSet1());
            mRecyclerView1.setAdapter(mAdapter1);

myadapter

public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private ArrayList<String> mDataset;

    public class ImageViewHolder extends RecyclerView.ViewHolder {
        //ImageView mImage;
        public TextView txtHeader;
        public TextView txtFooter;
        public ImageViewHolder(View itemView) {
            super (itemView);
            txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
            txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
        }
    }



    public void add(int position, String item) {
        mDataset.add(position, item);
        notifyItemInserted(position);
    }

    public void remove(String item) {
        int position = mDataset.indexOf(item);
        mDataset.remove(position);
        notifyItemRemoved(position);
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(ArrayList<String> myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public RecyclerView.ViewHolder  onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {

            // create a new view
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
            // set the view's size, margins, paddings and layout parameters
            ImageViewHolder vh = new ImageViewHolder(v);
            return vh;
        }


    private static final int TYPE_IMAGE = 1;
    private static final int TYPE_GROUP = 2;

    @Override
    public int getItemViewType(int position) {
        // here your custom logic to choose the view type
        return position;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {


                ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
                //  viewHolder.txtHeader.setText(...)
                final String name = mDataset.get(position);
                viewHolder.txtHeader.setText(mDataset.get(position));
                viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        remove(name);
                    }
                });

               // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));

        }


    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.size();
    }

}

my adpater1

public class MyAdapter1 extends RecyclerView.Adapter { private ArrayList mDataset;

public class ImageViewHolder extends RecyclerView.ViewHolder {
    //ImageView mImage;
    public TextView txtHeader;
    public TextView txtFooter;
    public ImageViewHolder(View itemView) {
        super (itemView);
        txtHeader = (TextView) itemView.findViewById(R.id.firstLine);
        txtFooter = (TextView) itemView.findViewById(R.id.secondLine);
    }
}



public void add(int position, String item) {
    mDataset.add(position, item);
    notifyItemInserted(position);
}

public void remove(String item) {
    int position = mDataset.indexOf(item);
    mDataset.remove(position);
    notifyItemRemoved(position);
}

// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter1(ArrayList<String> myDataset) {
    mDataset = myDataset;
}

// Create new views (invoked by the layout manager)
@Override
public RecyclerView.ViewHolder  onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {

    // create a new view
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout1, parent, false);
    // set the view's size, margins, paddings and layout parameters
    ImageViewHolder vh = new ImageViewHolder(v);
    return vh;
}


private static final int TYPE_IMAGE = 1;
private static final int TYPE_GROUP = 2;

@Override
public int getItemViewType(int position) {
    // here your custom logic to choose the view type
    return position;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(RecyclerView.ViewHolder TextViewHolder, int position) {


    ImageViewHolder viewHolder = (ImageViewHolder) TextViewHolder;
    //  viewHolder.txtHeader.setText(...)
    final String name = mDataset.get(position);
    viewHolder.txtHeader.setText(mDataset.get(position));
    viewHolder.txtFooter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            remove(name);
        }
    });

    // viewHolder.txtFooter.setText("Footer: " + mDataset.get(position));

}


// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return mDataset.size();
}

mainactivity layout

    <TextView
        android:id="@+id/textView"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:layout_alignParentTop="true"
        android:paddingTop="5dp"
        android:text="Recomanded for you"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view"
        android:layout_width="400dp"
        android:layout_height="180dp"
        android:layout_below="@id/textView"
        android:scrollbars="vertical" />


    <TextView
        android:id="@+id/textView1"
        android:layout_width="150dp"
        android:layout_height="30dp"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:layout_alignParentTop="true"
        android:paddingTop="5dp"
        android:layout_below="@id/my_recycler_view"
        android:text=" for you"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_recycler_view1"
        android:layout_width="400dp"
        android:layout_height="180dp"
        android:layout_below="@id/textView1"
        android:scrollbars="vertical" />
</RelativeLayout>

enter image description here

Upvotes: 1

Views: 3338

Answers (1)

andrea.petreri
andrea.petreri

Reputation: 4147

Since code in your adapters is exactly the same, you don't need to declare two different classes. You can use just one class and create two different instances from it, passing to each instance the right set of data to render in the RecyclerView.

Hope this could help:

private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;

private RecyclerView mRecyclerView1;
private RecyclerView.Adapter mAdapter1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recycler_view);

    //first recycler
    mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(
        new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));
    mAdapter = new MyAdapter(getDataSet());
    mRecyclerView.setAdapter(mAdapter);

    //second recycler
    mRecyclerView1 = (RecyclerView) findViewById(R.id.my_recycler_view1);
    mRecyclerView1.setHasFixedSize(true);
    mRecyclerView1.setLayoutManager(
        new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL, false));
    mAdapter1 = new MyAdapter(getDataSet1());
    mRecyclerView1.setAdapter(mAdapter1);

    // ...
}

Upvotes: 1

Related Questions