天天看点

第一行代码 3-5 软件也要拼脸蛋-UI界面-更强大的滚动条- 聊天室

动画 

https://www.jianshu.com/p/4fc6164e4709
      

  

前面说过,RecyclerView可以设置列表中Item删除和添加的动画,在v7包中给我们提供了一种默认的Item删除和添加的动画,如果没有特殊的需求,默认使用这个动画即可。

// 设置Item添加和移除的动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
      

  下面就添加一下删除和添加Item的动作。在Adapter里面添加方法。

public void addNewItem() { if(mData == null) { mData = new ArrayList<>(); } mData.add(0, "new Item"); notifyItemInserted(0); } public void deleteItem() { if(mData == null || mData.isEmpty()) { return; } mData.remove(0); notifyItemRemoved(0); } 


      

  添加事件的处理。

public void onClick(View v) { int id = v.getId(); if(id == R.id.rv_add_item_btn) { mAdapter.addNewItem(); // 由于Adapter内部是直接在首个Item位置做增加操作,增加完毕后列表移动到首个Item位置 mLayoutManager.scrollToPosition(0); } else if(id == R.id.rv_del_item_btn){ mAdapter.deleteItem(); // 由于Adapter内部是直接在首个Item位置做删除操作,删除完毕后列表移动到首个Item位置 mLayoutManager.scrollToPosition(0); } } 



      

  准备工作完毕后,来看一下运行的效果。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ 
/** * 展示数据 */ 
private ArrayList<String> mData;
 /** * 事件回调监听 */ 
private MyAdapter.OnItemClickListener onItemClickListener; 
public MyAdapter(ArrayList<String> data) { 
this.mData = data; }
 public void updateData(ArrayList<String> data) { 
this.mData = data; notifyDataSetChanged(); }
 /** * 添加新的Item */
 public void addNewItem() { 
if(mData == null) {
 mData = new ArrayList<>(); }
 mData.add(0, "new Item"); 
notifyItemInserted(0); } 
/** * 删除Item */
 public void deleteItem() {
 if(mData == null || mData.isEmpty()) { 
return; } mData.remove(0); notifyItemRemoved(0); } 
/** * 设置回调监听 * * @param listener */
 public void setOnItemClickListener(MyAdapter.OnItemClickListener listener) { 
this.onItemClickListener = listener; } 
@Override
 public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
// 实例化展示的view View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_item, parent, false); // 实例化
viewholder ViewHolder viewHolder = new ViewHolder(v); 
return viewHolder; }
 @Override
 public void onBindViewHolder(final ViewHolder holder, int position) {
 // 绑定数据 holder.mTv.setText(mData.get(position)); 
holder.itemView.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(final View v) { 
if(onItemClickListener != null) { 
int pos = holder.getLayoutPosition(); 
onItemClickListener.onItemClick(holder.itemView, pos); } } });
 holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
 @Override public boolean onLongClick(View v) { 
if(onItemClickListener != null) { 
int pos = holder.getLayoutPosition();
 onItemClickListener.onItemLongClick(holder.itemView, pos); } 
//表示此事件已经消费,不会触发单击事件 return true; } }); }
 @Override 
public int getItemCount() { 
return mData == null ? 0 : mData.size();
 } 
public static class ViewHolder extends RecyclerView.ViewHolder {
 TextView mTv; public ViewHolder(View itemView) {
 super(itemView); mTv = (TextView) itemView.findViewById(R.id.item_tv); } } 
public interface OnItemClickListener { 
void onItemClick(View view, int position); 
void onItemLongClick(View view, int position); } }