2016-08-05 2 views
2

私は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); 
     } 
    } 
} 

私はmPaymentMethods内の最後の要素に達したときに別のリスト項目のレイアウトが使用されるように、それを作りたいです。基本的には、リストの最後の項目をカスタマイズしたいと思います。

リスト内の最後のアイテムをカスタマイズするには、同じリスト内の他のアイテムと異なるレイアウトを使用しますか?

ありがとうございます。

答えて

3

したがって、getItemViewTypeは次のようにオーバーライドする必要があります。

@Override 
public int getItemViewType(int position) { 
    return position == mPaymentMethods.size() - 1 ? 1 : 0; 
} 

は、最終的にそうViewHolder0とViewHolder1クラスはViewHolderクラスを拡張する必要が選択されたレイアウト

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

を使用ビュータイプ

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

に従ってviewholder開始します。 3つのビューホルダークラスが必要ですか? @UğurB –

+0

2つのレイアウトに2つのクラスは必要ありません。最初に、実装した最初のビュータイプにViewHolderクラスを使用し、別のクラス(必要に応じて呼び出す必要があります)を作成し、2番目のビュータイプで拡張したレイアウトのビューアイテムを開始できます。 – uguboz

関連する問題