RecyclerView详解以及复杂布局

2020-09-28  本文已影响0人  KingWorld

RecyclerView不再负责显示工作,用法比ListView更解耦。和ListView不一样的是,RecyclerView不再负责Item的摆放等显示方面的功能。所有和布局、绘制等方面的工作Google都其拆分成不同的类进行管理。所以开发者可以自定义各种各样满足定制需求的的功能类。

这个是RecycleView的常见用法

类名 说明
RecyclerView.Adapter 托管数据集合,为每个Item创建视图
RecyclerView.ViewHolder 承载Item视图的子视图
RecyclerView.LayoutManager 负责Item视图的布局
RecyclerView.ItemDecoration 为每个Item视图添加子视图,在Demo中被用来绘制Divider
RecyclerView.ItemAnimator 负责添加、删除数据时的动画效果

项目介绍

LayoutManagerRecyclerView

recyclerView.setLayoutManager( new LinearLayoutManager( this ));

recyclerView.setLayoutManager( new GridLayoutManager( MainActivity.this , 3 ));

recyclerView.setLayoutManager( new StaggeredGridLayoutManager( 2 , StaggeredGridLayoutManager.VERTICAL));

myAdapter.notifyItemInserted( size );

myAdapter.notifyItemRemoved( 0 );

myAdapter.notifyDataSetChanged();

/**
     * 添加数据
     * @param content
     * @param position
     */
    public void addItem( String content, int position) {
        list.add(position, content);
        notifyItemInserted(position);
    }

    /**
     * 增加数据
     * @param content
     */
    public void addItem( String content ){
        if ( list == null ) {
            list = new ArrayList<>() ;
        }
        list.add( list.size() , content );
        notifyItemInserted( list.size() );
    }

    /**
     * 删除数据
     * @param model
     */
    public void removeItem(String model) {
        int position = list.indexOf(model);
        list.remove(position);
        notifyItemRemoved(position);//Attention!
    }

    /**
     * 删除数据
     * @param position
     */
    public void removeItem( int position ){
        list.remove( position ) ;
        notifyItemRemoved( position );
    }

ItemDecorationRecyclerView

SectionRecyclerView

PinnedSectionRecyclerView

AnimatorRecyclerview item 动画效果

//设置默认的动画
  recyclerView.setItemAnimator( new DefaultItemAnimator()) ;

https://github.com/gabrielemariotti/RecyclerViewItemAnimators

//从屏幕底部飞进来的动画
  recyclerView.setItemAnimator( new SlideInOutBottomItemAnimator( recyclerView ));

  //从屏幕左侧飞进来的动画
  recyclerView.setItemAnimator( new SlideInOutLeftItemAnimator( recyclerView ));

  //从屏幕右侧飞进来的动画
  recyclerView.setItemAnimator( new SlideInOutRightItemAnimator( recyclerView ));

  //从屏幕顶部飞进来的动画
  recyclerView.setItemAnimator( new SlideInOutTopItemAnimator( recyclerView ));

  //缩放进入屏幕, (备注:测试的时候有bug )
  recyclerView.setItemAnimator( new ScaleInOutItemAnimator( recyclerView )) ;

  //缩放的同时从屏幕右侧飞进来  (备注:测试的时候有bug )
  recyclerView.setItemAnimator( new SlideScaleInOutRightItemAnimator( recyclerView ));

https://github.com/wasabeef/recyclerview-animators

MultiRecyclerView

效果图

image

MultiRecyclerView2

这个项目是复杂布局分发框架 MultiType的使用

MultiType 就是一个多类型列表视图的中间分发框架,它能帮助你快速并且清晰地开发一些复杂的列表页面。它本是为聊天页面开发的,聊天页面的消息类型也是有大量不同种类,并且新增频繁,而 MultiType 能够轻松胜任,代码模块化,随时可拓展新的类型进入列表当中。它内建了 类型 - View 的复用池系统,支持 RecyclerView,使用简单灵活,令代码清晰、拥抱变化。

https://github.com/drakeet/MultiType

https://github.com/drakeet/MultiTypeTemplates

Android 复杂的多类型列表视图新写法:MultiType

Android 复杂的列表试图新写法 MultiType

Android 复杂的列表视图新写法: MultiType 详解篇

compile 'me.drakeet.multitype:multitype:2.2.2'

效果图:

image

RefreshRecyclerView

这个项目是实现下拉刷新,滑到底部自动加载的

参考资料

上一篇下一篇

猜你喜欢

热点阅读