项目里有一个需求 在列表的底部添加 更多好课在路上 本来打算直接在xml中在recyclerView 下添加一个布局文件 但是如果recyclerview过高时会顶掉 所以想到了footView 由于recyclerview没有直接提供方法来添加footView 那就自己做 主要内容都在适配器
参考文章 https://blog.youkuaiyun.com/qq_33337504/article/details/79034756
但是这篇文章并不能实现 稍微做了一些修改 如下
首先RecyclerView相当于多了一条数据 返回条目
然后重写 getItemViewType() 这个方法 关于这个函数的介绍我的参考文章里边有 不多做介绍
创建ViewHolder 判断viewType 引用各自的布局文件
ViewHolder
最后赋值
附上完整的适配器
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.houdask.judicial.R;
import com.houdask.judicial.entity.LsxyClassPacageListEntity;
import com.houdask.library.utils.GlideUtils;
import com.houdask.library.utils.StringEmptyUtils;
import java.util.ArrayList;
import java.util.List;
/**
* Created by qzp on 2019/6/13.
*/
public class HomeFragmentPacageListRecyclerAdapter extends RecyclerView.Adapter<HomeFragmentPacageListRecyclerAdapter.MyViewHolder> {
private static final int FOOT_VIEW = 1;
private Context context;
private List<LsxyClassPacageListEntity.PhaseListBean> list = new ArrayList<>();
public HomeFragmentPacageListRecyclerAdapter(Context context) {
this.context = context;
}
public void addData(List<LsxyClassPacageListEntity.PhaseListBean> data){
list.clear();
list.addAll(data);
notifyDataSetChanged();
}
public List<LsxyClassPacageListEntity.PhaseListBean> getData(){
return list;
}
@Override
public HomeFragmentPacageListRecyclerAdapter.MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (i == FOOT_VIEW){
View inflate = View.inflate(context, R.layout.homefragment_recyclerview_footview,null);
return new MyViewHolder(inflate,i);
} else {
View inflate = View.inflate(context, R.layout.homefragment_recyclerview_item,null);
return new MyViewHolder(inflate,i);
}
}
@Override
public void onBindViewHolder(final HomeFragmentPacageListRecyclerAdapter.MyViewHolder myViewHolder, int i) {
if (getItemViewType(i) != FOOT_VIEW){
//设置数据
GlideUtils.imageLoader(context,StringEmptyUtils.isEmptyResuleString(list.get(i).getImage()),myViewHolder.imageView);
myViewHolder.title.setText(StringEmptyUtils.isEmptyResuleString(list.get(i).getPhaseName()));
myViewHolder.teacher.setText("讲师:" + StringEmptyUtils.isEmptyResuleString(list.get(i).getTeacherName()));
myViewHolder.classNum.setText("共" + list.get(i).getVideoNum() + "节课");
if (mOnClickListener != null) {
myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = myViewHolder.getLayoutPosition();
mOnClickListener.onItemClickListener(myViewHolder.itemView, pos);
}
});
myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int poss = myViewHolder.getLayoutPosition();
mOnClickListener.onLongItemClickListener(myViewHolder.itemView,poss);
return false;
}
});
}
}
}
@Override
public int getItemCount() {
return list.size() + 1 ;
}
@Override
public int getItemViewType(int position) {
//当position是最后一个的时候,也就是比list的数量多一个的时候,则表示FooterView
if (position + 1 == list.size() + 1) {
return FOOT_VIEW;
}
return super.getItemViewType(position);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView = null;
private TextView title = null;
private TextView teacher = null;
private TextView classNum = null;
public MyViewHolder(View itemView,int viewType) {
super(itemView);
if (viewType != FOOT_VIEW){
imageView = itemView.findViewById(R.id.pacage_list_img);
title = itemView.findViewById(R.id.pacage_list_title);
teacher = itemView.findViewById(R.id.pacage_list_teacher);
classNum = itemView.findViewById(R.id.pacage_list_class_num);
}
}
}
//定义接口 条目点击事件 跟 长按条目点击事件
public interface OnClickListenerr{
void onItemClickListener(View view, int possition);
void onLongItemClickListener(View view, int possition);
}
private OnClickListenerr mOnClickListener;
public void setOnItemClinckListener(OnClickListenerr onClickListener){
this.mOnClickListener = onClickListener;
}
}