//定义适配器类
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. [LeetCode] 227. 基本计算器 II

    题目链接: https://leetcode-cn.com/problems/basic-calculator-ii 难度:中等 通过率:33.2% 题目描述: 实现一个基本的计算器来计算一个简单的字 ...

  2. python中的元类介绍

    类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段,在python中也是成立的. class ObjectCreator: pass my_object = ObjectCre ...

  3. Maven 相关功能介绍

    一: Maven环境隔离

  4. py3 base64加密

    import base64 #字符串编码: encodestr = base64.b64encode('abcr34r344r'.encode('utf-8')) print(str(encodest ...

  5. Jquery复习(八)之遍历

    jQuery 遍历 - 祖先 parent() parents() parentsUntil() jQuery parent() 方法 parent() 方法返回被选元素的直接父元素. 该方法只会向上 ...

  6. css的样式问题

    项目里面遇到一个布局: 然后侧边栏菜单的高度要随着内容的高度变化而变化:所以在这里贴一下代码:效果如下 <!DOCTYPE html> <html lang="en&quo ...

  7. IDEA启动软件可以选择进入项目而不是直接进入项目

    1.File--->Settings 2.Appearance & behavior --->System Settings --->Reopen last project ...

  8. Centos系统的启动流程

    一.CentOS6启动流程 1.流程图 2.说明 (1)post加电自检 这个过程是开机后,BIOS或UEFI进行硬件检查的阶段 (2)MBR引导 自检硬件没有问题时候,这里以BIOS为例,BIOS将 ...

  9. 扫描全能王 v5.13.0.20190916 去水印和广告版

    说明 1.先安装1(安装完不要打开),再安装2,然后打开2,参考下图: 2.不要登录扫描全能王账号,否则会导致失败! 3.激活完成后可以卸载2 下载地址 城通网盘 蓝奏云(仅含1) 百度网盘 另外口袋 ...

  10. 实践周java基础软件开发app之五子棋

    五子棋人机对战实践项目 总的任务和目标 完成一个人机对战的五子棋项目,基本效果如下: 第一部分 Java绘图原理 1.   基本概念 像素,坐标 第二部分 绘制棋盘 1.   基本思路 在一个JPan ...