2017-08-02 81 views
0

我試圖添加一個按鈕作爲我的RecyclerView的最後一項。我已經看到了一些教程,但我還沒弄明白。我使用數組列表添加我的主類中的項目。RecyclerView添加頁腳

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 

public Context context; 
private List<Archivos> mDataset; 

public MyAdapter(Context context, List<Archivos> myDataset) { 
    this.context = context; 
    this.mDataset = myDataset; 
} 

@Override 
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_item, parent, false); 
    Log.d("VIVZ", "onCreateHolder called"); 
    return new MyViewHolder(v); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    holder.mTextTitle.setText(mDataset.get(position).titulo); 
    holder.mTextDescription.setText(mDataset.get(position).descripcion); 
    holder.mTextType.setText(mDataset.get(position).type); 
    holder.mImageView.setImageDrawable(mDataset.get(position).icon); 
} 

@Override 
public int getItemCount() { 
    return mDataset.size(); 
} 

@Override 
public int getItemViewType(int position) { 
    return (position == mDataset.size()) ? R.layout.fr_signup : R.layout.card_item; 
} 

class MyViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener { 
    private CardView mCardView; 
    private TextView mTextTitle; 
    private TextView mTextDescription; 
    private TextView mTextType; 
    private ImageView mImageView; 

    private MyViewHolder(View v) { 
     super(v); 
     mCardView = v.findViewById(R.id.card_view); 
     mTextTitle = v.findViewById(R.id.card_doc_tittle); 
     mTextDescription = v.findViewById(R.id.card_doc_description); 
     mTextType = v.findViewById(R.id.card_doc_type); 
     mImageView = v.findViewById(R.id.iv_image); 
     mCardView.setOnClickListener(this); 
    } 

} 
+1

[RecyclerView頁眉和頁腳]的可能的複製(https://stackoverflow.com/questions/26585941/recyclerview-header-and-footer) –

+0

@TimCastelijns你能幫助我這個評論「嗨XXX isHeader並且isFooter不是方法,它們是你的列表項中的變量。例如,你有一個名爲MyItem的類,構造函數是public MyItem(Object myObject,boolean isHeader,boolean isFooter)「 – JosCarrillo

回答

0

在下面的代碼添加額外的線來表示你的recyclerview最後一排按鈕,在viewholder作爲ususal方式初始化按鈕:

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    holder.mTextTitle.setText(mDataset.get(position).titulo); 
    holder.mTextDescription.setText(mDataset.get(position).descripcion); 
    holder.mTextType.setText(mDataset.get(position).type); 
    holder.mImageView.setImageDrawable(mDataset.get(position).icon); 
    //To show button only in last row 
    if(position = mDataset.size()-1) 
    { 
     holder.mButton.setText("OK"); 
    } 
} 
0

我已經編輯您的適配器,包括頁腳,這不是完整的複製+粘貼解決方案,但有幾個TODO和評論提示你。

public class MyAdapter extends RecyclerView.Adapter { 

public Context context; 
private List<Archivos> mDataset; 

public MyAdapter(Context context, List<Archivos> myDataset) { 
    this.context = context; 
    this.mDataset = myDataset; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    if(viewType == R.layout.card_item){ 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.card_item, parent, false); 
     Log.d("VIVZ", "onCreateHolder called"); 
     return new MyViewHolder(v); 
    } else{ 
     // TODO: create here a holder for the Footer, inflate fr_signup and return it 
     Log.d("VIVZ", "onCreateFooterHolder called"); 
    } 
} 

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    if(getItemViewType(position) == R.layout.card_item){ 
     MyViewHolder h = (MyViewHolder) holder; 
     h.mTextTitle.setText(mDataset.get(position).titulo); 
     h.mTextDescription.setText(mDataset.get(position).descripcion); 
     h.mTextType.setText(mDataset.get(position).type); 
     h.mImageView.setImageDrawable(mDataset.get(position).icon); 
    } else { 
     // TODO: cast holder to the ViewHolder that of the footer and set any values needed 
    } 
} 

@Override 
public int getItemCount() { 
    return mDataset.size() + 1; // added here +1 for the footer 
} 

@Override 
public int getItemViewType(int position) { 
    return (position == mDataset.size()) ? R.layout.fr_signup : R.layout.card_item; 
} 

class MyViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener { 
    private CardView mCardView; 
    private TextView mTextTitle; 
    private TextView mTextDescription; 
    private TextView mTextType; 
    private ImageView mImageView; 

    private MyViewHolder(View v) { 
     super(v); 
     mCardView = v.findViewById(R.id.card_view); 
     mTextTitle = v.findViewById(R.id.card_doc_tittle); 
     mTextDescription = v.findViewById(R.id.card_doc_description); 
     mTextType = v.findViewById(R.id.card_doc_type); 
     mImageView = v.findViewById(R.id.iv_image); 
     mCardView.setOnClickListener(this); 
    } 

}