recyclerview历史
来源:互联网 发布:微信mac版 编辑:程序博客网 时间:2024/05/17 22:44
recyclerview历史
2014年10月16日Google正式将Android从”(奇巧)KitKat(Android 4.4)”升级为”(棒棒糖)Lollipop(Android 5.0到5.1.1)”, 成为Android有史以来最大的一次变革,新增多达5000+个API,在众多的新特性中,其中全新的设计语言Material Design,全新的通知中心设计,以及全新的ART模式最是吸引开发者的眼球,让我们来细细品味其魅力之recyclerview
Android5.0新控件 v7扩展包之RecyclerView
功能
RecyclerView提供了三种布局管理器
1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果。
2、GridLayoutManager:网格布局管理器,支持水平和垂直效果。
3、StaggeredGridLayoutManager:分布型管理器,瀑布流效果Animations(动画)效果
核心类
//找控件
RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rv);
//设置布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(layoutManager);
//设置适配器
HomeAdapter adapter = new HomeAdapter(this);
mRecyclerView.setAdapter(adapter);
RecylerView适配器
•把View绑定到ViewHolder上onCreateViewHolder(ViewGroup parent, int viewType)
•绑定数据给控件onBindViewHolder(MyViewHolder holder, final int position)
•获取数据的数量
getItemCount()
•自定义的ViewHolder,持有每个Item的的所有界面元素
public class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(View itemView) {
super(itemView);
}
}
•
接口回调实现
①新建两个内部接口:
public interface OnItemClickListener{
void onItemClick(View view,int position);
}
public interface OnItemLongClickListener{
void onItemLongClick(View view,int position);
}
②新建两个私有接口变量用于保存用户设置的监听器及其set方法:
private OnItemClickListener mOnItemClickListener;
private OnItemLongClickListener mOnItemLongClickListener;
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener){
this.mOnItemClickListener = mOnItemClickListener;
}
public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) {
this.mOnItemLongClickListener = mOnItemLongClickListener;
}
实现条目点击和长按事件
点击事件
adapter.setOnItemOnClickListener(new HomeAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "点击事件:" + position, Toast.LENGTH_SHORT).show();
}
});
长按事件
adapter.setOnItemLongClickListener(new HomeAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this, "长按事件:" + position, Toast.LENGTH_SHORT).show();
}
});
//把view绑定给ViewHolder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item, null);
final MyViewHolder holder = new MyViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getLayoutPosition();
//注册点击监听
if (itemClickListener != null) {
itemClickListener.onItemClick(v, position);
}
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = holder.getLayoutPosition();
if (itemLongClickListener != null) {
//注册长按监听
itemLongClickListener.onItemLongClick(v, position);
}
//事件消费,不继续传递
return true;
}
});
return holder;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item, null);
final MyViewHolder holder = new MyViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getLayoutPosition();
//注册点击监听
if (itemClickListener != null) {
itemClickListener.onItemClick(v, position);
}
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int position = holder.getLayoutPosition();
if (itemLongClickListener != null) {
//注册长按监听
itemLongClickListener.onItemLongClick(v, position);
}
//事件消费,不继续传递
return true;
}
});
return holder;
}
增删改
在适配器添加三个方法
//添加数据
public void add(int position, String text) {
data.add(position, text);
notifyItemInserted(position);
}
//移除数据
public void remove(int position) {
data.remove(position);
notifyItemRemoved(position);
}
//改变数据
public void change(int position, String text) {
data.remove(position);
data.add(position, text);
notifyItemChanged(position);
}
在代码中设置点击的时候调用并执行
adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(MainActivity.this, "条目的点击监听:" + position, Toast.LENGTH_SHORT).show();
MyItemAnimator animator = new MyItemAnimator();
animator.setAddDuration(2000);
adapter.add(position, "新的添加的条目");
recyclerView.setItemAnimator(animator);
animator.setMoveDuration(2000);
}
});
adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
@Override
public void onItemLongClick(View view, int position) {
Toast.makeText(MainActivity.this, "条目的长按监听:" + position, Toast.LENGTH_SHORT).show();
/* MyItemAnimator animator = new MyItemAnimator();
animator.setRemoveDuration(2000);
adapter.remove(position);
recyclerView.setItemAnimator(animator);
animator.setMoveDuration(2000);*/
//改变数据
MyItemAnimator animator = new MyItemAnimator();
// animator.setChangeDuration(2000);
adapter.change(position, "这是我改变的数据");
recyclerView.setItemAnimator(animator);
// animator.setMoveDuration(200);
}
});
0 0
- recyclerview历史
- 历史
- 历史
- 历史
- 历史..
- 历史
- 历史
- 历史
- 历史
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- RecyclerView
- 对象序列化
- php ajax跨域问题
- eclipse的安装及tomcat的配置
- 796C
- Java实现分页数据获取CachedRowSet
- recyclerview历史
- 进程间通信方式总结——共享内存
- Django账号绑定邮箱时发送链接
- 解决为什么写博客,写什么样的博客的问题
- 如何准备BAT技术面试答案(上)——Java研发方向
- 文章标题
- C++的const、指针、引用总结
- js中创建对象
- Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9