zoukankan      html  css  js  c++  java
  • Android开发——RecyclerView特性以及基本使用方法(二)

    0.  前言

    随着Android的发展,虽然ListView依旧重要,但RecyclerView确实越来越多的被大家使用。但显然并不能说RecyclerView就一定优于ListView,而是应该根据不同的需求选择最合适的进行使用。本篇将介绍我们为什么要使用RecyclerView,并且它的基本使用方法。

    Android开发——RecyclerView特性以及基本使用方法(一)中主要介绍了我们为什么要使用RecyclerView以及RecyclerView强大的LayoutManager。这篇将主要介绍RecyclerView中的动画效果以及点击事件的处理。本文原创,转载请注明出处为SEU_Calvin的博客


    1.  RecyclerView的动画效果和点击事件

    系统没有提供ClickListenerLongClickListener,不过我们也可以自己去添加,这里通过adapter中自己去提供回调的方式实现。

    Adapter中如下所示:

     public OnItemClickListener itemClickListener;
        public void setOnItemClickListener(OnItemClickListener itemClickListener) {
            this.itemClickListener = itemClickListener;
        }
        public interface OnItemClickListener {
            void onItemClick(View view, int position);
            void onItemLongClick(View view, int position);
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder{
            public TextView textView;
            public ViewHolder(View itemView) {
                super(itemView);
                textView = (TextView)itemView.findViewById(R.id.id_num);
                textView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        if (itemClickListener != null) {
                            itemClickListener.onItemClick(view, getPosition());
                        }
                    }
                });
                textView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View view) {
                        if (itemClickListener != null) {
                            itemClickListener.onItemLongClick(view, getPosition());
                        }
                        return true;
                    }
                });
            }
    }
    

    首先自行提供了点击和长按的接口,并在内部类ViewHolder中对点击事件进行了处理。

    Activity中的实现如下:

    mAdapter.setOnItemClickListener(new RecyclerAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(final View view, int position) {
                    Toast.makeText(MainActivity.this, position + "", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onItemLongClick(View view, int position) {
                    mAdapter.removeData(position);
                }
            });
    

    这里简单的单击事件,只是Toast了位置信息,而在长按事件中,则调用了Adapter中的removeData()方法,notifyItemRemoved()方法则对该条目进行了删除,而且是有动画效果的。若有添加数据的需求,也是有对应的方法,即notifyItemInserted(position)

    public void removeData(int position) {
            mData.remove(position);
            notifyItemRemoved(position);
        }
        public void addData(int position) {
            mData.add(position, "Insert One");
            notifyItemInserted(position);
        }
    

    当然,需要为RecyclerView进行关于动画的设置:

    mRcList.setItemAnimator(newDefaultItemAnimator());



    这里需要注意的是,如Android开发——RecyclerView特性以及基本使用方法(一)中显示的那样,notifyDataSetChanged()是没有动画效果的。从效果图中可以看到,RecyclerView可以正常的响应点击事件,和长按删除事件,而且添加和删除事件都是有动画效果的。

    源码下载地址点这里

  • 相关阅读:
    Java提高学习之Object(5)
    cmd命令。
    CacheView。
    快速界面:QML。
    抓包工具。
    打包安装程序。
    AS:加载新版本的SWF文件。
    as自定义菜单。
    as [Frame]元标签
    转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461452.html
Copyright © 2011-2022 走看看