• 第一行代码 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); } }

      

  • 相关阅读:
    文件共享锁定数溢出(AC等修改数据多出错)
    智能五子棋基本思路
    API与C#数据结构类型对应关系表
    读书释疑C#浅拷贝与深拷贝
    冒泡排序(C#数据结构学习九)
    希尔排序(C#数据结构学习八)
    fatal error LNK1169: 找到一个或多个多重定义的符号
    Solo Spirit系统精灵(含C#源码)
    插入排序(C#数据结构学习七)
    快速排序(C#数据结构学习十)
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/9196907.html
Copyright © 2020-2023  润新知