Kevin Learn Recyclerview-->UltimateRecyclerView 的基本使用

Posted Kevin_小飞象

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kevin Learn Recyclerview-->UltimateRecyclerView 的基本使用相关的知识,希望对你有一定的参考价值。

简介

UltimateRecyclerView 是一个 RecyclerView(android中ListView的高级灵活版),具有刷新、加载更多、动画等多种功能。

功能

  • 滑动刷新
  • 多种动画
  • 滑动关闭
  • 视差或正常头部视图
  • 拖放项目
  • 到达最后一项时加载更多(无限滚动)
  • 加载更多的自定义视图
  • 滚动时显示或隐藏工具栏和浮动按钮
  • 滚动条
  • 多彩风格的刷卡刷新
  • 像 instagram 这样的粘性标题
  • 支持适配器中的不同布局
  • 加载带有动画的适配器
  • recyclerview 中的可扩展视图

效果图

使用

1. 添加依赖

repositories 
    jcenter()
    
dependencies 
    ...
    implementation 'com.marshalchen.ultimaterecyclerview:library:0.9.0'

2. 布局文件

  • main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.qmuiteam.qmui.widget.QMUITopBar
        android:id="@+id/topbar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        app:qmui_topbar_title_bold="true"
        app:qmui_topbar_title_color="@color/white"
        android:background="@color/app_color_theme_8"
        tools:ignore="MissingConstraints" />

    <com.marshalchen.ultimaterecyclerview.UltimateRecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        app:recyclerviewClipToPadding="true"
        app:recyclerviewDefaultSwipeColor="@array/google_colors"
        app:recyclerviewFloatingActionView="@layout/floating_view"
        app:recyclerviewScrollbars="vertical" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • exp_parent.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@id/exp_section_ripple_wrapper_click"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:layout_margin="0dp"
    android:background="@color/teal_200"
    android:padding="0dp">

    <RelativeLayout
        android:id="@id/exp_section_adjustment_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="0dp"
        android:clickable="false"
        android:focusable="false"
        android:padding="0dp">
        <!-- android:foreground="?android:attr/selectableItemBackground"
        -->
        <TextView
            android:id="@id/exp_section_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="8dp"
            android:layout_toLeftOf="@id/exp_section_notification_number"
            android:layout_toStartOf="@id/exp_section_notification_number"
            android:gravity="left"
            android:lines="1"
            android:text="sample menu item parent"
            android:textAlignment="viewStart"
            android:textAppearance="@style/TextAppearance.AppCompat.Body2"
            android:textColor="@android:color/black"
            android:textSize="16sp"
            tools:ignore="RtlCompat" />

        <TextView
            android:id="@id/exp_section_notification_number"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginRight="8dp"
            android:layout_toLeftOf="@id/exp_indication_arrow"
            android:elegantTextHeight="false"
            android:gravity="center_horizontal"
            android:maxLength="5"
            android:singleLine="true"
            android:text="(99)"
            android:textAlignment="center"
            android:textColor="@android:color/black"
            android:textSize="12sp"
            android:textStyle="bold" />

        <ImageView
            android:id="@id/exp_indication_arrow"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="16sp"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_item_swipe_right" />
    </RelativeLayout>

</RelativeLayout>
  • exp_child.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@id/exp_section_ripple_wrapper_click"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:layout_margin="0dp"
    android:padding="0dp">

    <RelativeLayout
        android:id="@id/exp_section_adjustment_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="0dp"
        android:clickable="false"
        android:focusable="false"
        android:foreground="?android:attr/selectableItemBackground"
        android:orientation="horizontal"
        android:padding="0dp">

        <TextView
            android:id="@id/exp_section_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:lines="1"
            android:textAppearance="@style/TextAppearance.AppCompat.Body2"
            android:textColor="@android:color/black"
            android:textSize="12sp" />


    </RelativeLayout>
</RelativeLayout>

3. Bean 类

  • Category.java
public class Category extends easyTemplateParent<SmartItem, RelativeLayout, TextView> 
    public Category(View itemView) 
        super(itemView);
    

  • SubCategory.java
public class SubCategory extends easyTemplateChild<SmartItem, TextView, RelativeLayout> 
    public SubCategory(View itemView) 
        super(itemView);
    

4. 适配器

public class ExpCustomAdapter extends customizedAdapter<Category, SubCategory> 
    public ExpCustomAdapter(Context context) 
        super(context);
    

    public static List<SmartItem> getPreCodeMenu(String[] a, String[] b, String[] c) 
        List<SmartItem> e = new ArrayList<>();
        e.add(SmartItem.parent("世界名著", "open", DataUtil.getSmallList(a)));
        e.add(SmartItem.parent("推荐书籍", "open", DataUtil.getSmallList(b)));
        e.add(SmartItem.parent("体育明星", "open", DataUtil.getSmallList(c)));
        return e;
    

    /**
     * please do work on this id the custom object is true
     *
     * @param parentview the inflated view
     * @return the actual parent holder
     */
    @Override
    protected Category iniCustomParentHolder(View parentview) 
        return new Category(parentview);
    

    /**
     * please do work on this if the custom object is true
     *
     * @param childview the inflated view
     * @return the actual child holder
     */
    @Override
    protected SubCategory iniCustomChildHolder(View childview) 
        return new SubCategory(childview);
    

    @Override
    protected int getLayoutResParent() 
        return R.layout.exp_parent;
    

    @Override
    protected int getLayoutResChild() 
        return R.layout.exp_child;
    

    @Override
    protected List<SmartItem> getChildrenByPath(String path, int depth, int position) 
        return null;
    


    @Override
    public RecyclerView.ViewHolder newFooterHolder(View view) 
        return new UltimateRecyclerviewViewHolder(view);
    

    @Override
    public RecyclerView.ViewHolder newHeaderHolder(View view) 
        return new UltimateRecyclerviewViewHolder(view);
    

5. MainActivity.java

public class MainActivity extends AppCompatActivity 
    private static String[] sampledatagroup1 = 
            "《论语》", "http://google",
            "《三国演义》", "http://google",
            "《红与黑》", "http://google",
            "《老人与海》", "http://google"
    ;
    private static String[] sampledatagroup2 = 
            "《第一行代码》", "http://google",
            "《代码整洁之道》", "http://google",
            "《重构》", "http://google",
            "《程序员的职业素养》", "http://google",
            "《如何阅读》", "http://google"
    ;
    private static String[] sampledatagroup3 = 
            "科比", "http://google",
            "C罗", "http://google",
            "林丹", "http://google",
            "刘德华", "http://google",
            "周杰伦", "http://google"
    ;

    @BindView(R.id.recycler_view)
    UltimateRecyclerView mRecyclerView;

    @BindView(R.id.topbar)
    QMUITopBar mTopBar;

    private ExpCustomAdapter simpleRecyclerViewAdapter = null;
    private LinearLayoutManager linearLayoutManager;
    private ActionMode actionMode;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        initView();
    

    private void initView() 
        mTopBar.setTitle("二级列表");
        mTopBar.addLeftBackImageButton().setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                finish();
            
        );

        mRecyclerView.setHasFixedSize(false);

        simpleRecyclerViewAdapter = new ExpCustomAdapter(this);
        simpleRecyclerViewAdapter.addAll(ExpCustomAdapter.getPreCodeMenu(sampledatagroup1, sampledatagroup2, sampledatagroup3), 0);

        linearLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(linearLayoutManager);
        mRecyclerView.setAdapter(simpleRecyclerViewAdapter);
        mRecyclerView.setRecylerViewBackgroundColor(Color.parseColor("#ffffff"));
        addExpandableFeatures();
    

    private void addExpandableFeatures() 
        mRecyclerView.getItemAnimator().setAddDuration(100);
        mRecyclerView.getItemAnimator().setRemoveDuration(100);
        mRecyclerView.getItemAnimator().setMoveDuration(200);
        mRecyclerView.getItemAnimator().setChangeDuration(100);
    

以上是关于Kevin Learn Recyclerview-->UltimateRecyclerView 的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Kevin Learn RecyclerView--> 实现二级列表

Kevin Learn Recyclerview-->Leanback 中的 HorizontalGridView

Kevin Learn Recyclerview-->UltimateRecyclerView 的基本使用

Kevin Learn RecyclerView--> Retrofit + RxJava + OkHttp 网络请求

Kevin Learn Recyclerview-->SpringView (下拉刷新)的基本使用

Kevin Learn Kotlin:函数