RecyclerView
5.0后Google对使用了很久的ListView做了升级,增加了一个使用更方便,效率更高的控件
依赖:
compile 'com.android.support:recyclerview-v7:25.0.+'
adapter:
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.ViewHolder> {
ArrayList<String> mDatas;
public MyRecyclerAdapter(ArrayList<String> datas) {
mDatas = datas;
}
//创建一个内部类继承于RecyclerView.ViewHolder
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView tv;
public ViewHolder(View itemView) {
super(itemView);//父类的super()是将该itemview赋予给父类的itemview,若itemView为空则抛出一个异常
tv= (TextView) itemView;
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//完成itemclick监听事件的回调
if (mListener!=null){
mListener.onItemClick(v,getPosition());
}
}
});
}
}
//封装好的viewholder方法,将自己创建的ViewHolder与adapter关联起来
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
//返回的是自己创建的ViewHolder对象
return new ViewHolder(view);
}
//将数据状态到ViewHolder中,这里的viewholder就是onCreateViewHolder()返回的viewholder
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tv.setText(mDatas.get(position));
}
@Override
public int getItemCount() {
return mDatas.size();
}
//进阶,创建监听事件,因为recycler没有像listview那样的itemclicklistener
public interface OnItemClickListener{
void onItemClick(View view,int position);
}
OnItemClickListener mListener;
public void setListener(OnItemClickListener listener){
mListener=listener;
}
}
recyclerview:
private void initView() {
//获取recyclerview
recyclerview = (RecyclerView) findViewById(R.id.recyclerview);
//模拟数据
ArrayList<String> strs=new ArrayList<>();
for (int i = 0; i < 10; i++) {
strs.add("展示数据"+i);
}
//设置adapter
MyRecyclerAdapter myRecyclerAdapter = new MyRecyclerAdapter(strs);
recyclerview.setAdapter(myRecyclerAdapter);
//设置了adapter发现并没有数据展示出来,因为还需要设置布局样式
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
recyclerview.setLayoutManager(gridLayoutManager);
//设置显示动画
recyclerview.setItemAnimator(new DefaultItemAnimator());
}
自定义onitemclick事件
//实现自定义的点击效果
myRecyclerAdapter.setListener(new MyRecyclerAdapter.OnItemClickListener() {
@Override
public void onItemClick(final View view, final int position) {
view.animate()
.translationX(15000f)
.setDuration(300)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.animate().
setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
strs.remove(position);
myRecyclerAdapter.notifyDataSetChanged();
}
})
.translationX(0f)
.setDuration(300).start();
}
}).start();
}
});