For each RecyclerView an Adapter?

1

A question, for example to create a recyclerView I have to create its adapter and put the design inside, now well if I want another design I necessarily have to create another adapter ?? in itself it would be every recyclerView has its own adapter and if I wanted another I have to create another adapter, that's how they apologize the question but I have a doubt. Thanks

    
asked by Gunnar 31.03.2016 в 12:54
source

1 answer

5

You do not have to create another Adapter, you just have to implement getItemViewType() to define your different types of views:

@Override
public int getItemViewType(int position) {
   switch(position) {
       case 0:
           return TIPO_A;
       case 1:
           return TIPO_B;
       case 2:
           return TIPO_C;
       default:
           return TIPO_A;
   }
}

Create your ViewHolder:

public class ViewHolderA extends RecyclerView.ViewHolder {
    TextView mTitle;
    TextView mContent;
    public GroupViewHolder(View itemView) {
        super (itemView);
        ...
    }
}

public class ViewHolderB extends RecyclerView.ViewHolder {
    ImageView mImage;
    public ImageViewHolder(View itemView) {
        super (itemView);
        ...
    }
}

public class ViewHolderC extends RecyclerView.ViewHolder {
    ImageView mImage;
    public ImageViewHolder(View itemView) {
        super (itemView);
        ...
    }
}

In onCreateViewHolder() we return the type of ViewHolder (Container):

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType) {
        case TIPO_A: return new ViewHolderA(...);
        case TIPO_B: return new ViewHolderB(...);
        case TIPO_C: return new ViewHolderC(...);
        ...
    }
}

In bindViewHolder() we link the type of view to recycle:

@Override
public void bindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (getItemViewType(position)) {
        case TIPO_A:
            ViewHolderA viewHolderA = (ViewHolderFirst)holder;
            ...
            break;
        case TIPO_B:
            ViewHolderB viewHolderB = (ViewHolderSecond)holder;
            ...
            break;
        case TIPO_C:
            ViewHolderC viewHolderC = (ViewHolderSecond)holder;
            ...
            break;
        ...
    }

So you could have different types of views with different characteristics in a single Adapter :

    
answered by 01.04.2016 / 02:25
source