//定义适配器类
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. PythonDay16

    第十六章模块 今日内容 自定义模块 time模块 datetime模块 rendom模块 自定义模块 # import 模块 例:import time# 导入的是time模块中所有的内容(变量,函数 ...

  2. django1.9安装以及使用

    安装setuptoolswget --no-check-certificate https://pypi.python.org/packages/69/56/f0f52281b5175e3d9ca86 ...

  3. ELK-全文检索技术-lucene

    ELK   :  ELK是ElasticSearch,LogStash以及Kibana三个产品的首字母缩写 一.倒排索引 学习elk,必须先掌握倒排索引思想, 参考文档: https://www.cn ...

  4. vue-cli中开发生产css注入形式不同导致bug

    开发环境和生产环境不同导致的差异.主要是css层级有变动:开发环境只是单纯的使用了style-loader进行style标签插入,不进行额外的处理,比如说资源合并和添加md5后缀等,这样做是为了让编译 ...

  5. iOS 支付 [支付宝、银联、微信]

    这是开头语 前不久做了一个项目,涉及到支付宝和银联支付,支付宝和银联都是业界的老大哥,文档.SDK都是很屌,屌的找不到,屌的看不懂,屌到没朋友(吐槽而已),本文将涉及到的最新可用SDK.文档,以及本人 ...

  6. VMware 中的win7虚拟机在一段时间后就会自动挂起

    VMware workstation 中的win7虚拟机在一段时间不用后就会自动挂起. 其实这不是VMware workstation 的问题,而是win7的问题.关闭win7系统 的自动休眠功能即可 ...

  7. java软件设计模式只单例设计模式

    概述 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计 ...

  8. 用python实现js语言里的特性

    有大佬说:“搜 arraybuffer 的 polyfill 然后翻译成 python就行了” ...

  9. Linux音频编程(三)混音器介绍

    一.介绍 1.mixer:用来控制多个输入.输出的音量,也控制输入(microphone,line-in,CD)之间的切换,可以将多个信号组合或者叠加在一起.声卡上的混音器由多个混音通道组成,它们可以 ...

  10. SQL Server设置启动存储过程

    --设置开关 启动程序自动运行存储过程必须启动该命令 sp_configure "show advanced options",1; go reconfigure; go --设置 ...