Recyclerview添加头布局和尾布局,点击效果
简介:
本篇博客主要包括recyclerview添加多种布局以及添加头布局和尾布局,还有item点击事件
思路:
主要重写Recyclerview.Adapter中的一些方法
1.public int getItemCount() item熟练 +2(头布局和尾布局)
2.public int getItemViewType(int position) 判断position 设置itemType
3.创建不同的ViewHolder,分别用来加载头布局,正常布局,尾布局
4.public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 根据viewType的不同返回不同的viewholder
5.public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) 根据holder的不同绑定不同的数据
案例:
主布局中只有一个Recyclerview,里面的item除了基本的两种类型,还有头布局和尾布局,点击基本类型跳转到另外一个Activity,显示图片

下面主要贴出Adapter和MainActivity中的代码,其他的布局文件,类比较简单就不贴出了
1.Adapter
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener {
private Context context;
private List<Person> datas;
private static final int ITEM_ONE=1;
private static final int ITEM_TWO=2;
private static final int ITEM_HEAD=3;
private static final int ITEM_FOOT=4;
private int headViewCount=1;
private int footViewCount=1;
private OnItemClickListener onItemClickListener;
public MyAdapter(Context context, List<Person> datas) {
this.context = context;
this.datas = datas;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType==ITEM_HEAD){
View view= LayoutInflater.from(context).inflate(R.layout.item_head,parent,false);
return new HeaderViewHolder(view);
}else if(viewType==ITEM_FOOT){
View view=LayoutInflater.from(context).inflate(R.layout.item_foot,parent,false);
return new FootViewHolder(view);
}
else if(viewType==ITEM_ONE){
View view= LayoutInflater.from(context).inflate(R.layout.item_recyclerview,parent,false);
return new ViewHolder(view);
}else if(viewType==ITEM_TWO){
View view=LayoutInflater.from(context).inflate(R.layout.item_recyclerview2,parent,false);
return new ViewHolder(view);
}
return null;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if(holder instanceof HeaderViewHolder){
}else if(holder instanceof FootViewHolder){
}
else if(holder instanceof ViewHolder){
//注意除去头布局
holder.itemView.setTag(position-1);
holder.itemView.setOnClickListener(this);
((ViewHolder)holder).img.setBackgroundResource(datas.get(position-1).getImgId());
((ViewHolder)holder).tv1.setText(datas.get(position-1).getName());
((ViewHolder)holder).tv2.setText(datas.get(position-1).getDetail());
}
}
@Override
public int getItemCount() {
if(datas==null){
return headViewCount+footViewCount;
}
return datas.size()+headViewCount+footViewCount;
}
@Override
public int getItemViewType(int position) {
if(isHeadView(position)){
return ITEM_HEAD;
}
if(isFootView(position)){
return ITEM_FOOT;
}
if(position%2==0){
return ITEM_ONE;
}else{
return ITEM_TWO;
}
}
public boolean isHeadView(int position){
return headViewCount!=0&&position<headViewCount;
}
public boolean isFootView(int position){
return footViewCount!=0&&position>=(datas.size()+headViewCount);
}
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv1,tv2;
ImageView img;
public ViewHolder(View itemView) {
super(itemView);
tv1=itemView.findViewById(R.id.tv1);
tv2=itemView.findViewById(R.id.tv2);
img=itemView.findViewById(R.id.img);
}
}
class HeaderViewHolder extends RecyclerView.ViewHolder{
public HeaderViewHolder(View itemView) {
super(itemView);
}
}
class FootViewHolder extends RecyclerView.ViewHolder{
public FootViewHolder(View itemView) {
super(itemView);
}
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
this.onItemClickListener=onItemClickListener;
}
interface OnItemClickListener{
void onItemClick(View view,int position);
}
}
2.MainActivity
public class MainActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener {
private RecyclerView recyclerView;
private List<Person> datas;
private MyAdapter adapter;
private int[] imgs={R.drawable.p1,R.drawable.p2,R.drawable.p3,R.drawable.p4,R.drawable.p5,R.drawable.pic1,
R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,R.drawable.pic6};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView= (RecyclerView) findViewById(R.id.recyclerview);
initData();
initRecyclerView();
}
private void initRecyclerView() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter=new MyAdapter(this,datas);
adapter.setOnItemClickListener(this);
recyclerView.setAdapter(adapter);
}
private void initData() {
datas=new ArrayList<>();
for(int i=0;i<imgs.length;i++){
Person p=new Person();
p.setName("hahfa"+i);
p.setDetail("今天是星期一,还有5天才能休息"+i);
p.setImgId(imgs[i]);
datas.add(p);
}
}
@Override
public void onItemClick(View view, int position) {
Intent intent=new Intent(MainActivity.this,ImageActivity.class);
intent.putExtra("imgId",datas.get(position).getImgId());
startActivity(intent);
}
}
Recyclerview添加头布局和尾布局,点击效果的更多相关文章
- 手把手教你给RecycleView添加头布局和尾布局
RecycleView想必大家都不陌生,它已他的高拓展性取代了传统布局显示,同时配合协调布局,可以实现很多意想不到的酷炫交互,今天就和大家介绍一下,如何给RecycleView添加头布局和尾布局,同时 ...
- 仿喜马拉雅实现ListView添加头布局和脚布局
ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动 ...
- GridView不能添加头布局,并且scrollView与GridView冲突导致一些页面无法融合
此贴为标记贴 方便下次使用 在项目需求中原本是用ScrollView来进行整个页面的滑动,ScrollView里面包含的有图片轮播,文字轮播,与2列GridView的item 问题 使用原生的Grid ...
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- Android 5.X新特性之为RecyclerView添加HeaderView和FooterView
上一节我们讲到了 Android 5.X新特性之RecyclerView基本解析及无限复用 相信大家也应该熟悉了RecyclerView的基本使用,这一节我们来学习下,为RecyclerView添加H ...
- RecyclerView添加Header的正确方式
原文链接:http://blog.csdn.net/qibin0506/article/details/49716795 看了一下博客目录,已经有好几篇博客是关于RecyclerView的,不过对于这 ...
- Android RecyclerView添加Header头部
Android RecyclerView添加Header头部 Android RecyclerView不像以前的ListView那样直接添加头部,如果要给RecyclerView增加头部,则需要 ...
- 为ListView添加头和脚
转自:https://software.intel.com/zh-cn/blogs/2014/12/15/android-listview-addheaderview-addfooterview ...
- 中间自适应,左右定宽的两种经典布局 ---- 圣杯布局 VS 双飞翼布局
一.引子 最近学了些js框架,小有充实感,又深知如此节奏的前提需得基础扎实,于是回头想将原生CSS和Javascript回顾总结一番,先从CSS起,能集中它的就在基础的布局上,便查阅了相关资料,将布局 ...
随机推荐
- acm中文版
http://acm.nyist.net/JudgeOnline/problem.php?pid=1
- 实现对sqlite数据库增删改查
package com.example.db.dao;import java.util.ArrayList;import java.util.List;import android.content.C ...
- xe 最大连接数限制、记录客户连接、心跳
xe 最大连接数限制.记录客户连接.心跳 //author: cxg unit DSServerContainer; interface uses SysUtils, Classes, IniF ...
- win7系统清除USBSTOR记录
方法一 1.Win+R,出现运行窗口,如图所示: 2.在输入框中输入“regedit”,如图所示: 3.进入后,点击编辑-查找,查找输入框中输入“USBSTOR”(为了加快查找速度,可以只选择“项”) ...
- 73个word使用终极技巧
1.问:Word里边怎样设置每页不同的页眉?如何使不同的章节显示的页眉不同? 答:分节,每节可以设置不同的页眉.文件——页面设置——版式——页眉和页脚——首页不同 2.问:请问Word中怎样让每一章用 ...
- redis和phpredis扩展的安装
redis的安装https://code.google.com/p/redis/downloads/list下载redisredis-2.6.13.tar.gztar -xvzf redis-2.6. ...
- java中split的用法即回顾
package com.b; public class Cor { public static void main(String[] args) { String a = "this is ...
- web.config 权限设置
<system.web> <authorization> <!--未登陆用户不可以访问--> <deny users="?" /> ...
- 安全测试回顾(一)补充:burp 的基本操作
浏览器设置; 拦截请求: Spider 伪造请求: 对这个url 伪造请求 拦截一个页面后,进入攻击模块 sniper 两个参数值 保证一个不变 另一个 进行枚举 battering ram 两个 ...
- CVE-2017-11882复现配合koadic
项目地址:https://github.com/iBearcat/CVE-2017-11882 首先开启koadic,然后配置一下 复制这句代码 mshta http://192.168.220.13 ...