Reputation: 2136
I have a recyclerview and an adapter:
public class PaymentMethodAdapter extends RecyclerView.Adapter<PaymentMethodAdapter.ViewHolder> {
private List<PaymentMethod> mPaymentMethods = new ArrayList<>(0);
public PaymentMethodAdapter(List<PaymentMethod> paymentMethods) {
mPaymentMethods = paymentMethods;
int size = mPaymentMethods.size();
mPaymentMethods.add(size + 1, null);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_payment_method_list, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (mPaymentMethods.get(position) == null) { // Last item
// Display add payment method item.
}
}
@Override
public int getItemCount() {
return mPaymentMethods.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.item_payment_method_image_view) ImageView paymentImageView;
@Bind(R.id.item_payment_method_card_number_text_view) TextView cardNumberTextView;
@Bind(R.id.item_current_payment_method_image_view) ImageView currentMethodImageView;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
I want to make it so that when the last element in mPaymentMethods
is reached a different list item layout is used. Basically I want to customize the last item in the list.
How do I customize the last item in a list use a different layout to the other items in the same list?
Thank you.
Upvotes: 2
Views: 54
Reputation: 3654
You should override getItemViewType accordingly as follows.
@Override
public int getItemViewType(int position) {
return position == mPaymentMethods.size() - 1 ? 1 : 0;
}
Initiate viewholder according to the view type
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if(viewType == 0){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_payment_method_list_0, parent, false);
return new ViewHolder0(view);
} else {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_payment_method_list_1, parent, false);
return new ViewHolder1(view);
}
}
finally use the chosen layout
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder instanceOf ViewHolder0){
//do stuff with layout 0
} else {
// do stuff with layout 1
}
}
Upvotes: 3