BaseRecyclerViewAdapterHelper

RecyclerView做爲Android最經常使用的控件,受益羣體幾乎是全部Android開發者,但願更多開發者可以一塊兒來維護這個項目,把這個項目作得更好,幫助更多人。Star個人項目可加Q羣558178792,申請的時候把GitHub的帳號名字備註上不然不予經過,謝謝配合。中國有句古話叫「授人以魚不如授人以漁」,不單單提供使用,還寫了如何實現的原理:android

Android Arsenal

BaseRecyclerViewAdapterHelper

logo
一個強大而且靈活的RecyclerViewAdapter,歡迎使用。(喜歡的能夠Star一下)ide

Goolge Play Demo

Get it on Google Play

它能作什麼?(下載 apk

  • 優化Adapter代碼(減小百分之70%代碼)佈局

  • 添加點擊item點擊、長按事件、以及item子控件的點擊事件post

  • 添加加載動畫(一行代碼輕鬆切換5種默認動畫)gradle

  • 添加頭部、尾部、下拉刷新、上拉加載(感受又回到ListView時代)優化

  • 設置自定義的加載更多佈局

  • 添加分組(隨心定義分組頭部)

  • 自定義不一樣的item類型(簡單配置、無需重寫額外方法)

  • 設置空佈局(比Listview的setEmptyView還要好用!)

demo

如何使用它?

先在 build.gradle 的 repositories 添加:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

而後在dependencies添加:

dependencies {
            compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.7.9'
    }

如何使用它來建立Adapter?

demo

public class QuickAdapter extends BaseQuickAdapter<Status> {
    public QuickAdapter(Context context) {
        super(context, R.layout.tweet, DataServer.getSampleData());
    }

    @Override
    protected void convert(BaseViewHolder helper, Status item) {
        helper.setText(R.id.tweetName, item.getUserName())
                .setText(R.id.tweetText, item.getText())
                .setText(R.id.tweetDate, item.getCreatedAt())
                .setVisible(R.id.tweetRT, item.isRetweet())
                .linkify(R.id.tweetText);
                 Glide.with(mContext).load(item.getUserAvatar()).crossFade().into((ImageView) helper.getView(R.id.iv));
    }
}

如何添加item點擊、長按事件

mQuickAdapter.setOnRecyclerViewItemClickListener();
mQuickAdapter.setOnRecyclerViewItemLongClickListener();

新增添加子佈局多個控件的點擊事件

Adapter

protected void convert(BaseViewHolder helper, Status item) {
    helper.setOnClickListener(R.id.tweetAvatar, new OnItemChildClickListener())
      .setOnClickListener(R.id.tweetName, new OnItemChildClickListener());
      }

Activity

mQuickAdapter.setOnRecyclerViewItemChildClickListener(new BaseQuickAdapter.OnRecyclerViewItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                String content = null;
                Status status = (Status) adapter.getItem(position);
                switch (view.getId()) {
                    case R.id.tweetAvatar:
                        content = "img:" + status.getUserAvatar();
                        break;
                    case R.id.tweetName:
                        content = "name:" + status.getUserName();
                        break;
                }
                Toast.makeText(AnimationUseActivity.this, content, Toast.LENGTH_LONG).show();
            }
        });

如何使用它添加動畫?

// 一行代碼搞定(默認爲漸顯效果)
quickAdapter.openLoadAnimation();

不喜歡漸顯動畫能夠這樣更換

// 默認提供5種方法(漸顯、縮放、從下到上,從左到右、從右到左)
quickAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);

仍是沒你喜歡的,你能夠自定義

// 自定義動畫如此輕鬆
quickAdapter.openLoadAnimation(new BaseAnimation() {
                            @Override
                            public Animator[] getAnimators(View view) {
                                return new Animator[]{
                                        ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1),
                                        ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1)
                                };
                            }
                        });

使用它添加頭部添加尾部

mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());

使用它加載更多

mQuickAdapter.openLoadMore(PAGE_SIZE, true);
mQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                mRecyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mCurrentCounter >= TOTAL_COUNTER) {
                            mQuickAdapter.notifyDataChangedAfterLoadMore(false);
                        } else {
                            mQuickAdapter.notifyDataChangedAfterLoadMore(DataServer.getSampleData(PAGE_SIZE), true);
                            mCurrentCounter = mQuickAdapter.getItemCount();
                        }
                    }

                });
            }
        });

設置自定義加載更多佈局

mQuickAdapter.setLoadingView(customView);

使用分組

public class SectionAdapter extends BaseSectionQuickAdapter<MySection> {
     public SectionAdapter(Context context, int layoutResId, int sectionHeadResId, List data) {
        super(context, layoutResId, sectionHeadResId, data);
    }
    @Override
    protected void convert(BaseViewHolder helper, MySection item) {
        helper.setImageUrl(R.id.iv, (String) item.t);
    }
    @Override
    protected void convertHead(BaseViewHolder helper,final MySection item) {
        helper.setText(R.id.header, item.header);
        if(!item.isMroe)helper.setVisible(R.id.more,false);
        else
        helper.setOnClickListener(R.id.more, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,item.header+"more..",Toast.LENGTH_LONG).show();
            }
        });
    }

如何添加多種類型item?

public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem> {

    public MultipleItemQuickAdapter(Context context, List data) {
        super(context, data);
        addItmeType(MultipleItem.TEXT, R.layout.text_view);
        addItmeType(MultipleItem.IMG, R.layout.image_view);
    }

    @Override
    protected void convert(BaseViewHolder helper, MultipleItem item) {
        switch (helper.getItemViewType()) {
            case MultipleItem.TEXT:
                helper.setImageUrl(R.id.tv, item.getContent());
                break;
            case MultipleItem.IMG:
                helper.setImageUrl(R.id.iv, item.getContent());
                break;
        }
    }

}

使用setEmptyView

mQuickAdapter.setEmptyView(getView());

持續更新!,因此推薦Star項目

感謝

JoanZapata / base-adapter-helper

相關文章
相關標籤/搜索