Coder
Coder

Reputation: 53

How to show 2 adapter in one recyclerview in mainactivity?

I have 2 adapter and I want to show 2 adapter in one recycelrview. for example, i have one adapter for post with image and another i have one adapter for post without image. I want to show both adapter post with image and post without image, i try some and my code is below.

This is my MainActivity.

 //with image
  private List<ModelPostImage> postImageList;
  private AdapterImage adapterImage;

 //without image
private List<ModelPost> postList;
private AdapterPost adapterPost;

//load posts
 loadPostWithImage();
 loadPostWithoutImage();

 //loadWithImage
 private void loadPostWithImage() {
    DatabaseReference ref 
 FirebaseDatabase.getInstance().getReference("postImage");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            postImageList.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                ModelPostImage modelPostImage= 
                   ds.getValue(ModelPostImage.class);

                postImageList.add(modelPostImage);
                adapterImage= new AdapterImage(MainActivity.this, 
                 postImageList);
                //set adapter to RecyclerView
                recyclerView.setAdapter(adapterImage);


            }

        }

  //loadWithoutImage
   private void loadPostWithoutImage() {
    DatabaseReference ref 
 FirebaseDatabase.getInstance().getReference("Posts");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            postList.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                ModelPost modelPost= 
                   ds.getValue(ModelPost.class);

                postList.add(modelPost);
                adapterPost = new AdapterPost(MainActivity.this, 
                 postList);
                //set adapter to RecyclerView
                recyclerView.setAdapter(adapterPost);

it does not show post with image, what should i do?

Upvotes: 0

Views: 525

Answers (3)

Ajay Singh Kadian
Ajay Singh Kadian

Reputation: 1

Instead of using two adapters in one RecyclerView, you can add one or more views in an adapter at one time. You just override getItemViewType() method in your adapter like this:

@Override
public int getItemViewType(int position)
{
   if(position==0)
     return LAYOUT_ONE;
   else
     return LAYOUT_TWO;
} 

and you can add your views in onCreateViewHolder like this:

@Override
   public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

      View view =null;
      RecyclerView.ViewHolder viewHolder = null;

      if(viewType==LAYOUT_ONE)
      {
          view = LayoutInflater.from(parent.getContext()).inflate(R.layout.one,parent,false);
          viewHolder = new ViewHolderOne(view);
      }
      else
      {
          view = LayoutInflater.from(parent.getContext()).inflate(R.layout.two,parent,false);
          viewHolder= new ViewHolderTwo(view);
      }

      return viewHolder;
   }

and in onBindViewHolder() do something like this:

    @Override
       public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

          if(holder.getItemViewType()== LAYOUT_ONE)
          {
                // Typecast Viewholder 
                // Set Viewholder properties 
                // Add any click listener if any 
          }
          else {

            ViewHolderOne vaultItemHolder = (ViewHolderOne) holder;
            vaultItemHolder.name.setText(displayText);
            vaultItemHolder.name.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                .......
               }
             });

           }
}

Upvotes: 0

I don't think you can use 2 adapters on one recyclerview but what you can do is you can create multiple viewholder types for your adapter for different types of layout. You can check this out https://stackoverflow.com/a/58160491/8300303

Upvotes: 1

Tyrone Chris Abad
Tyrone Chris Abad

Reputation: 76

Use 2 kinds of ViewHolder for the RecyclerView Adapter instead of having 2 Adapters in 1 RecyclerView

You can also have more information on how to use RecyclerView correctly here. https://guides.codepath.com/android/using-the-recyclerview

Upvotes: 2

Related Questions