2017-08-02 124 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); 
    } 

}