How does RecyclerView handle recycling with different views?

Viewed 1627

How does it handle recycling when we have heterogeneous views in a RecyclerView? For example in the following code, we are creating 3 different types of views to be used in a recycler view. Now after these views have been inflated, how does recyclerView know not to use these views for position 1 & 2 for rest of the items?

private class CustomAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private static final int TYPE_1 = 1;
private static final int TYPE_2 = 2;
private static final int TYPE_3 = 3;
// more types...

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType) {
        case TYPE_1: inflate view_type_1
            break;
        case TYPE_2: inflate view_type_2
            break;
        case TYPE_3: inflate view_type_3
            break;
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (getItemViewType(position)) {
        case TYPE_1:
            break;
        case TYPE_2:
            break;
        case TYPE_3:
            break;
    }
}

@Override
public int getItemViewType(int position) {
    if(position == 1) {
        return TYPE_1;
    } else if(position == 2) {
        return TYPE_2;
    } else 
        return TYPE_3
}
}
3 Answers
Related