Android中一個很贊的RecyclerView Adapter輔助類

Tor6721 8年前發布 | 19K 次閱讀 Android開發 移動開發 RecyclerView

是什么

BaseRecyclerViewAdapterHelper是一個強大并且靈活的RecyclerViewAdapter。

它能做什么

  • 優化Adapter代碼
  • 添加點擊事件
  • 添加列表加載動畫
  • 添加添加頭部、添加尾部
  • 添加下拉刷新、上拉加載
  • 添加分組
  • 自定義不同item類型
  • 設置setEmptyView
  • 添加子布局控件的點擊事件

效果圖

如何使用它?

先在 build.gradle 的 repositories 添加:

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

然后在dependencies添加:

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

如何使用它來創建Adapter?

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())
                .setImageUrl(R.id.tweetAvatar, item.getUserAvatar())
                .setVisible(R.id.tweetRT, item.isRetweet())
                .linkify(R.id.tweetText);
    }
}

這么復雜的布局只需要15行代碼即可!

如何添加item點擊事件

mQuickAdapter.setOnRecyclerViewItemClickListener(new BaseQuickAdapter.OnRecyclerViewItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                //..
            }
        });

如何使用它添加動畫?

// 一行代碼搞定(默認為漸顯效果)
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)
                                };
                            }
                        });

如何添加多種類型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;
        }
    }

}

使用它添加頭部添加尾部

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

使用它加載更多

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

使用分組

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();
            }
        });
    }

使用setEmptyView

mQuickAdapter.setEmptyView(getView());

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

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();
            }
        });

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();
    }
});

 

 本文由用戶 Tor6721 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!