listview 加入footerView 之后为什么看不见那个 footerView

 我来答
撕撕扯扯碎了慈
2017-03-19 · TA获得超过374个赞
知道答主
回答量:559
采纳率:0%
帮助的人:127万
展开全部
  使用过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);
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式