EasyRecyclerView,简单易上手,支持多种常用的功能的RecyclerView

引包

compile 'com.jude:easyrecyclerview:4.4.2'

使用方法

xml中使用

<com.jude.easyrecyclerview.EasyRecyclerView
  android:id="@+id/recyclerView"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  app:layout_empty="@layout/view_empty"
  app:layout_progress="@layout/view_progress"
  app:layout_error="@layout/view_error"
  app:recyclerClipToPadding="true"
  app:recyclerPadding="8dp"
  app:recyclerPaddingTop="8dp"
  app:recyclerPaddingBottom="8dp"
  app:recyclerPaddingLeft="8dp"
  app:recyclerPaddingRight="8dp"
  app:scrollbarStyle="insideOverlay"//insideOverlay or insideInset or outsideOverlay or outsideInset
  app:scrollbars="none"//none or vertical or horizontal
  />

代码中设置

void setEmptyView(View emptyView)
void setProgressView(View progressView)
void setErrorView(View errorView)

展示视图

void showEmpty()
void showProgress()  
void showError()  
void showRecycler()

Demo:上拉下拉刷新,加载时进度提示,错误提示

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="com.junx.easyrecyclerview.MainActivity">

    <com.jude.easyrecyclerview.EasyRecyclerView
        android:id="@+id/rv"
        android:layout_width="368dp"
        android:layout_height="495dp"
        app:scrollbarStyle="insideOverlay"
        app:layout_error="@layout/view_error"

        app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent" android:layout_marginLeft="8dp"
        android:layout_marginBottom="8dp" android:layout_marginTop="8dp"/>
</android.support.constraint.ConstraintLayout>
//传入数据的model为泛型
public class DemoViewHolder extends BaseViewHolder<Person> {
    private TextView mTv_name;
    private ImageView mImg_face;
    private TextView mTv_sign;

    public DemoViewHolder(ViewGroup parent) {
        super(parent,R.layout.item_person);
        mTv_name = $(R.id.person_name);
        mTv_sign = $(R.id.person_sign);
        mImg_face = $(R.id.person_face);
    }

    @Override
    public void setData(Person person) {
        mTv_name.setText(person.getName());
        mTv_sign.setText(person.getSign());

        Picasso.with(getContext())
                .load(person.getFace())
                .into(mImg_face);
    }
}
public class MainActivity extends AppCompatActivity{

    EasyRecyclerView rv;
    private RecyclerArrayAdapter<Person> adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rv= (EasyRecyclerView) findViewById(R.id.rv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        //设置分割线
        DividerDecoration decoration = new DividerDecoration(Color.RED, 2, 20, 20);
        decoration.setDrawLastItem(false);
        rv.addItemDecoration(decoration);

        rv.setAdapterWithProgress(adapter=new RecyclerArrayAdapter<Person>(this) {
            @Override
            public BaseViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) {
                //adapter与viewholder解耦,通过viewholder
                return new DemoViewHolder(parent);
            }
        });

        //下拉刷新
        rv.setRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                adapter.addAll(DataProvider.getPersonList(1));
                            }
                        });
                    }
                },2000);
            }
        });

        //上拉加载更多
        adapter.setMore(R.layout.view_more, new RecyclerArrayAdapter.OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                //当加载数据的size=0时,展示数据到底的视图,并且不能在上拉刷新
                                adapter.addAll(new ArrayList<Person>());
                            }
                        });
                    }
                },2000);
            }
        });
        //设置数据到底时的视图
        adapter.setNoMore(R.layout.view_nomore);

        adapter.setError(R.layout.view_error, new RecyclerArrayAdapter.OnErrorListener() {
            @Override
            public void onErrorShow() {
                Log.d("meee",getClass()+":\n"+"onErrorShow:");
//                adapter.resumeMore();
            }

            @Override
            public void onErrorClick() {
                Log.d("meee",getClass()+":\n"+"onErrorClick:");
//                adapter.resumeMore();
            }
        });
        //通过该方法展示error视图
        rv.showError();
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                      adapter.pauseMore();
                      Log.d("meee",getClass()+":\n"+"暂停");
                  }
              });
            }
        },2000);

    }
}

插入 更新 移除数据

        //添加item出现的动画
        rv.setItemAnimator(new DefaultItemAnimator());
        //插入数据 移除数据 更新数据
                adapter.insert(data,position);
                adapter.remove(position);
                adapter.update(data,position);

添加头布局和脚布局

        adapter.addHeader(new RecyclerArrayAdapter.ItemView() {
            @Override
            public View onCreateView(ViewGroup parent) {
                TextView tv = new TextView(MainActivity.this);
                tv.setText("你好啊");
                return tv;
            }

            @Override
            public void onBindView(View headerView) {
            }
        });
        adapter.addFooter(new RecyclerArrayAdapter.ItemView() {
            @Override
            public View onCreateView(ViewGroup parent) {
                TextView tv = new TextView(MainActivity.this);
                tv.setText("你好啊");
                return tv;
            }

            @Override
            public void onBindView(View headerView) {

            }
        });

添加粘性头布局

public class StickyHeaderAdapter implements StickyHeaderDecoration.IStickyHeaderAdapter<StickyHeaderAdapter.HeaderHolder> {

    private LayoutInflater mInflater;

    public StickyHeaderAdapter(Context context) {
        mInflater = LayoutInflater.from(context);
    }

    @Override
    public long getHeaderId(int position) {
        return position / 3;
    }

    @Override
    public HeaderHolder onCreateHeaderViewHolder(ViewGroup parent) {
        final View view = mInflater.inflate(R.layout.header_item, parent, false);
        return new HeaderHolder(view);
    }

    @Override
    public void onBindHeaderViewHolder(HeaderHolder viewholder, int position) {
        viewholder.header.setText("第"+getHeaderId(position)+"组");
    }

    class HeaderHolder extends RecyclerView.ViewHolder {
        public TextView header;

        public HeaderHolder(View itemView) {
            super(itemView);
            header = (TextView) itemView;
        }
    }
}
//R.layout.header_item
<?xml version="1.0" encoding="utf-8"?>

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:background="#e6e6e6"
    android:paddingLeft="16dp"
    android:gravity="center_vertical"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#000">

</TextView>
        StickyHeaderDecoration stickyHeaderDecoration = new StickyHeaderDecoration(new StickyHeaderAdapter(this));
        stickyHeaderDecoration.setIncludeHeader(false);
        rv.addItemDecoration(stickyHeaderDecoration);
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值