//定义适配器类
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private Context context;
private List<People> DataList;

//编写导入数据的通用构造方法
MyAdapter(Context context, List<People> DataList){
this.context=context;
this.DataList=new ArrayList<>(DataList);
}
/*
以下三个方法和一个类是必须要重写的方法
*/
//ViewHolder(子项视图保存类):将当前Item视图都实例化保存起来,避免反复调用findViewById方法,浪费资源
//此处不能使用Butterknife
class MyViewHolder extends RecyclerView.ViewHolder{
TextView itemText;
ImageView itemImage;
public MyViewHolder(View itemView) {
super( itemView );
itemText=itemView.findViewById( R.id.itemText );
itemImage=itemView.findViewById( R.id.itemImage );

}
}
//创建ViewHolder实例并返回,加载item 的布局
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemlayout,parent,false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
//对RecyclerView子项数据进行赋值,将子项数据与ViewHolder里的控件进行绑定(设置)
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.itemText.setText( DataList.get( position ).getData() );
holder.itemImage.setImageResource( DataList.get( position ).getImageId() );
//把图片进行按比例缩放
holder.itemImage.setScaleType( ImageView.ScaleType.FIT_CENTER );

//自定义点击事件(直接在Adapter类重写点击事件)
/*holder.itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText( context, ""+position,Toast.LENGTH_SHORT).show();
}
} );*/

//自定义点击事件(点击后触发的是:holder.itemView.setOnClickListener方法,
//然后调用自定义监听时间接口的onItemClick(position)方法,具体执行代码由外部实现)
if (myItemClickListener != null) {
holder.itemView.setOnClickListener( new View.OnClickListener() {

@Override
public void onClick(View v) {
myItemClickListener.onItemClick(position );
}
} );
}
}
//返回子项(Item)个数
@Override
public int getItemCount() {
return DataList.size();
}

//自定义监听事件接口ItemClickListener ,和在Adapter类里的引用myItemClickListener
private ItemClickListener myItemClickListener;
public interface ItemClickListener{
void onItemClick( int position);//点击监听事件,在外部实现
}
//让外部能够使用setItemClickListener给ItemClickListener内部引用赋值
public void setItemClickListener(ItemClickListener myItemClickListener) {
this.myItemClickListener = myItemClickListener;
}
//让外部能添加和删除Item的方法
public void addItem(int position,People people){
DataList.add( position,people );
//增添动作刷新适配器
notifyItemInserted( position );

}
public void removeItem(int position){
DataList.remove( position );
//删除动作刷新适配器
notifyItemRemoved( position );
}
}

DataList是外部传入的子项数据列表的更多相关文章

  1. 【WPF】闲着没事,写了个支持数据列表分页的帮助类

    支持分页的MVVM组件大家可以网上找,老周这个类只是没事写来娱乐一下的,主要是功能简单,轻量级,至少它满足了我的需求,也许还有未知的 bug . 这个类支持对数据列表进行分页处理,原理是利用 Skip ...

  2. .NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

    说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等. 它们的共同 ...

  3. CS窗体程序数据列表分页

    以前,觉得winform程序分页很无趣,也没实际意义,直到近期的项目实践中让我认识到原来winform数据列表分页也是非常有必要的,因为由于数据量过大的情况,当窗体在初始加载数据的时候如果不做条件的限 ...

  4. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  5. 从后端到前端之Vue(四)小试牛刀——真实项目的应用(树、tab、数据列表和分页)

    学以致用嘛,学了这么多,在真实项目里面怎么应用呢?带着问题去学习才是最快的学习方式.还是以前的那个项目,前后端分离,现在把前端换成vue的,暂时采用脚本化的方式,然后在尝试工程化的方式. 现在先实现功 ...

  6. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  7. c# gridview数据列表中NamingContainer容器的用法

    当在前台我们绑定了一个linkbutton型的按钮,并触发了onserverclick="delBook_Server"的服务端事件,前台代码如下: <asp:Templat ...

  8. knockoutjs中使用mapping插件绑定数据列表

    使用KO绑定数据列表示例:   1.先申请V,T,T2三个辅助方法,方便调试.声明viewModel和加载数据时的映射条件mapping    2.先使用ko.mapping.fromJS()将原来的 ...

  9. js动态生成数据列表

    我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js ...

随机推荐

  1. Python进阶编程 面向对象

    一.面向对象 1.1面向对象的基本格式 class 类名: def 方法名(self): print(123) return 123 def 方法名(self): print(123) return ...

  2. AtCoder,Codeforces做题记录

    AGC024(5.20) 总结:猜结论,“可行即最优” B: 给定一个n的排列,每次可以将一个数移到开头或结尾,求变成1,2,...,n所需的最小步数. 找到一个最长的i,i+1,...,j满足在排列 ...

  3. npm学习(八)之如何使用语义化版本

    npm的语义化版本控制——Semantic versioning 在新发布的代码中传达更改的程度非常重要,因为有时更新会破坏包需要的代码(称为依赖项).语义化版本控制(semver)是一个旨在解决这个 ...

  4. qt使用QWT注意事项

    当继承某个QWT类时,有是使用O_OBJECT弘会出现问题 切记在工程文件里别忘了添加这一句 DEFINES+=QWT_DLL

  5. httpClient4.5.2工具类总结

    使用背景: 因项目使用非结构化存储,http相关jar包统一升级到httpClient4.5.2,查阅相关文档总结如下,以咨分享,望不吝指教. 依赖jar包 httpclient-4.5.2.jar. ...

  6. sqlserver2008 批量导出所有的作业

    SQl server 代理 -- 选中作业 -- 按 F7,弹出 对象资源管理详细信息 ,里面对作业多选以后右键就有导出 sql的菜单了

  7. CreateRemoteThread

    CreateRemoteThread是一个Windows API函数,它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程)..

  8. java高并发核心要点|系列1|开篇

    在java高并发编程,有几个很重要的内容: 1.CAS算法 2.CPU重排序 3.缓存行伪共享 我们先来说说高并发世界中的主要关键问题是什么? 是数据共享. 因为多线程之间要共享数据,就会遇到各种问题 ...

  9. CentOS7 配置阿里云yum源,非常之简单

    1.进入yum的文件夹 命令:cd   /etc/yum.repos.d/ 2.下载wget 命令:yum -y install wget 命令:yum install bash-completion ...

  10. ARM汇编 汇编文件后缀.s与.S

    有两套汇编的语法: ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编. ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言: GNU汇编即在Linux下用GCC编译的汇 ...