android recyclerview 可以添加footer吗

 我来答
约定20125
2015-11-03 · TA获得超过1.5万个赞
知道大有可为答主
回答量:1.1万
采纳率:96%
帮助的人:2887万
展开全部
  使用过RecyclerView的同学就知道它并没有添加header和footer的方法,而ListView和GirdView都有,但是开发过程中难免有需求需要添加一个自定义的header或者footer,或者不同布局的Item。
  好了,我们知道如果在ListView中要添加不同的布局的item,都是通过重写getItemViewType()和getViewTypeCount()这两个方法来控制的,OK,对于RecyclerView,还是用这个方法来做,分别对不同的Item用不同的flag标记,然后在创建和绑定数据时候分别对不同的flag对应不同的处理,直接上代码(这里我添加了header和footer):
RecyclerView.Adapter
publicclassRecyclerViewAdapterextendsRecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolder> {private List<String> datas;
privatestaticfinalint IS_HEADER = 2;
privatestaticfinalint IS_FOOTER = 3;
privatestaticfinalint IS_NORMAL = 1;
publicRecyclerViewAdapter(List<String> datas) {
this.datas = datas;
}

@Overridepublic RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerViewHolder holder;
//对不同的flag创建不同的Holderif (viewType == IS_HEADER) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_header, viewGroup, false);
holder = new RecyclerViewHolder(view,IS_HEADER);
return holder;
} elseif (viewType == IS_FOOTER) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_footer, viewGroup, false);
holder = new RecyclerViewHolder(view,IS_FOOTER);
return holder;
}elseif(viewType==IS_NORMAL){
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_item, viewGroup, false);
holder = new RecyclerViewHolder(view,IS_NORMAL);
return holder;
}
returnnull;
}

@OverridepublicvoidonBindViewHolder(final RecyclerViewHolder recyclerViewHolder, int position) {
//对不同的Item相应不同的操作if(position!=0&&position!=datas.size()+1&&recyclerViewHolder.viewType==IS_NORMAL){
recyclerViewHolder.mTextView.setText(datas.get(position - 1));
}
if(position==0&&recyclerViewHolder.viewType==IS_HEADER){
//header
recyclerViewHolder.mButton.setOnClickListener(new View.OnClickListener() {
int i=0;
@OverridepublicvoidonClick(View v) {
recyclerViewHolder.mButton.setText(++i+"");
}
});
}
if(position==datas.size()+1&&recyclerViewHolder.viewType==IS_FOOTER){
//footer
}

}

@OverridepublicintgetItemCount() {
return datas.size() + 2;

}

@OverridepublicintgetItemViewType(int position) {
if (position == 0) {
return IS_HEADER;
} elseif(position==datas.size()+1){
return IS_FOOTER;
}else {
return IS_NORMAL;
}
}

class RecyclerViewHolder extends RecyclerView.ViewHolder {
public TextView mTextView;
public Button mButton;
publicint viewType;
publicRecyclerViewHolder(View itemView,int viewType) {
super(itemView);
this.viewType = viewType;
if(viewType==IS_HEADER){
mButton = (Button) itemView.findViewById(R.id.button);
}
if(viewType==IS_FOOTER){
//do some sthing
}
if(viewType==IS_NORMAL){
mTextView = (TextView) itemView.findViewById(R.id.tv_content);
}
}
}
}
RecyclerView.ViewHolder
classRecyclerViewHolderextendsRecyclerView.ViewHolder {public TextView mTextView;
public Button mButton;
publicint viewType;
public RecyclerViewHolder(View itemView,int viewType) {
super(itemView);
this.viewType = viewType;
if(viewType==IS_HEADER){
mButton = (Button) itemView.findViewById(R.id.button);
}
if(viewType==IS_FOOTER){
//do some sthing
}
if(viewType==IS_NORMAL){
mTextView = (TextView) itemView.findViewById(R.id.tv_content);
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Storm代理
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企... 点击进入详情页
本回答由Storm代理提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式