vendredi 29 janvier 2016

RecyclerView and ViewHolder pattern - proper design approach

I've got RecyclerView list where items views are created partially from layout in .xml file (let's say header) and partially programmatically based on list items. I'm using few different itemsViewTypes.

Which approach is better?

1) to generate Views in adapter:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    createAndAddNewViews(barsHolder);
    createAndAddNewViewsBasedOnSomeParams(param1, param2);

    // both createAndAddNewViews() and   
    // createAndAddNewViewsBasedOnSomeParams() are Adapter methods

    return holder;
}

2) to generate Views in ViewHolder:

public MyViewHolder(View itemView) {
    super(itemView);

    ... // findViewsById and so on

    createAndAddNewViews();
    createAndAddNewViewsBasedOnSomeParams(param1, param2);

    // both createAndAddNewViews() and   
    // createAndAddNewViewsBasedOnSomeParams() are ViewHolder methods
}

Of course my examples are simplified just to show the case.

From code reading perspective it's better to have views generation logic inside holders. Every different item has it's own creation code inside one class. I don't have to deal with every single item in Adapter. But I'm not sure if it's ok simply from ViewHolder pattern design and from memory and speed optimization perspective.

I wonder which approach you consider as better and why.

Thanks!

Aucun commentaire:

Enregistrer un commentaire