如何在android中使最后一个列表项与其他列表项不同?

如何在android中使最后一个列表项与其他列表项不同?,android,xml,android-recyclerview,Android,Xml,Android Recyclerview,我有一个recyclerview和一个适配器: public class PaymentMethodAdapter extends RecyclerView.Adapter<PaymentMethodAdapter.ViewHolder> { private List<PaymentMethod> mPaymentMethods = new ArrayList<>(0); public PaymentMethodAdapter(List&l

我有一个recyclerview和一个适配器:

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);
        }
    }
}
公共类PaymentMethodAdapter扩展了RecyclerView.Adapter{
私有列表mPaymentMethods=newArrayList(0);
public PaymentMethodAdapter(列出paymentMethods){
mPaymentMethods=付款方法;
int size=mPaymentMethods.size();
mPaymentMethods.add(大小+1,空);
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.item\u payment\u method\u list,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
if(mPaymentMethods.get(position)==null){//最后一项
//显示添加付款方式项目。
}
}
@凌驾
public int getItemCount(){
返回mPaymentMethods.size();
}
静态类ViewHolder扩展了RecyclerView.ViewHolder{
@绑定(R.id.item\u payment\u method\u image\u view)ImageView paymentImageView;
@绑定(R.id.item\u payment\u method\u card\u number\u text\u view)文本视图cardNumberTextView;
@绑定(R.id.item\u current\u payment\u method\u image\u view)图像视图当前方法图像视图;
公共视图持有者(视图项视图){
超级(项目视图);
ButterKnife.bind(这个,itemView);
}
}
}
我想这样做,当到达
mPaymentMethods
中的最后一个元素时,将使用不同的列表项布局。基本上我想自定义列表中的最后一项

如何自定义列表中的最后一项使用与同一列表中其他项不同的布局


谢谢。

您应该相应地重写getItemViewType,如下所示

@Override
public int getItemViewType(int position) {
    return position == mPaymentMethods.size() - 1 ? 1 : 0;
}
根据视图类型启动viewholder

@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);
   }

}
最后使用选定的布局

 @Override
 public void onBindViewHolder(ViewHolder holder, int position) {
   if (holder instanceOf ViewHolder0){
      //do stuff with layout 0
   } else {
      // do stuff with layout 1
   }        
 }

因此ViewHolder0和ViewHolder1类应该扩展ViewHolder类。这是否意味着我需要3个视图持有者类@Uğur BNo你需要2节课来完成2个布局。第一个u可以将ViewHolder类用于您实现的第一个viewtype,并且您需要另一个类(可以随意调用),并启动为第二个viewtype膨胀的布局的视图项。