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

来源:互联网 发布:淘宝买家信用贷款 编辑:程序博客网 时间:2024/06/03 18:57

引包

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);
原创粉丝点击