前边说过了RecyclerView的使用,这时候可能满足不了我们的开发需求。list view 可以实现头部添加,那么RecyclerView 也一样可以实现。系统没有为我们提供源生的方法来实现这步骤; 这时候就需要来实现
这里我们的解决方案和网上你能搜到的大多数方案一样,是通过控制Adapter的itemType来设置的,思路就是根据不同的itemType去加载不同的布局。这时候只需要指定加载在item 的 第零位置即可 ;这时候我们我们模仿list view ,一样吧添加的布局写在activity 里,这时候布局要进入到适配器,就需要适配新设置一个方法来把布局传传递进来,有了这样的思路就可以去实现了;
在原有适配器的基础上,
1 定义两个常量,来为不同布局做标记,在定义一个view 来作为要添加的布局;
View headView;
static final int TYPE_HODE = 0;
static final int TYPE_NOMAL = 1;
2 我们还需要添加一个方法,来供activity 调用,传入view
并且调用系统的 notifyItemInserted(); 让插入的位置在第 0 位
该方法在 notifyDataSetChanged();之前掉用
public void setHeadView(View headView) {
this.headView = headView;
notifyItemInserted(0);//在position位置插入数据的时候更新
}
3 因为是和list view 实现多布局一样, 所以我们需要重写 getItemViewType ();
在该方法返回不同布局样式(是我们做的标记) 默认为没添加头部
@Override
public int getItemViewType(int position) {
if (headView == null) return TYPE_NOMAL;
if (position == 0) return TYPE_HODE;
return TYPE_NOMAL;
}
4 为了方便我们后边使用,我们这里还需要 定义一个方法,来计算item 下标,因为添加了头部的布局,所以 position-1
public int getRealPosition(RecyclerView.ViewHolder holder) {
int position = holder.getLayoutPosition();
return headView == null ? position : position - 1;
}
4 为了满足添加头部布局,和没有添加头部布局可以使用同样的adapter
接下来就需要改造源来的适配器三个方法&#x