Skip to content

wpnine/Various-RecyclerView

Repository files navigation

Various-RecyclerView

使RecyclerView 容易去扩展不同样式的item

当RecyclerView需要实现不同样式的item,一般是实现Adapter中的getItemViewType(),接着onCreateViewHolder中创建不同的ViewHolder。 但是当样式相对比较多或者界面的交互相对复杂时(如下图),可能存在以下几个问题:

1.Adapter代码会越来越难臃肿,变得不好维护
2.当移除或新增item时,可能影响到其它item
3.同一业务中,可能会有不同的页面,存在着一样的item,这时候代码也不要复用
4.局部刷新等的计算相对复杂
...

image

而Various-RecyclerView 是针对列表似的复杂界面而实现的,使不同的item种类进行独立处理,同一样式的item在不同页面中可以复用,同时使页面代码易于后期维护。

Usage

实现item

public class LabelItem extends RecyclerItem<List<String>,LabelItem.ViewHolder> {

      @Override
      public LabelItem.LabelViewHolder createChildViewHolder(ViewGroup parent, int viewType) {
          //create viewHolder
          return viewHolder
      }
      
      @Override
      public void onBindViewHolder(LabelItem.LabelViewHolder viewHolder, int position, int viewType) {
      }
      
      @Override
      public int getItemCount(List<String> data) {
            return data.size();
      }

      public static class LabelViewHolder extends RecyclerView.ViewHolder{
              ......
      }
}

初始化

RVDelegation delegation = new RVDelegation();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new SimpleAdapter(mRVDelegation));
delegation.initView(mRecyclerView);

    初始化列表items

delegation.createTask()
          .attatchItem(new LabelItem(Color.WHITE), Arrays.asList("item 1>>1","item 1>>2"))
          .attatchItem(new LabelItem(Color.YELLOW), Arrays.asList("item 2>>1"))
          .attatchItem(new LabelItem(Color.RED), Arrays.asList("item 3>>1"))
          .attatchItem(new ImageItem(),new int[]{R.mipmap.ic_launcher_round})
          .commit();

    更新列表

mRVDelegation.createTask()
            .changeData(
              labelItem,
              Arrays.asList("item 1>>1","item 1>>2","item 1>>3"), 
              RefreshTask.RULE_ADJUST_BOTTOM)
            .commit();

Releases

No releases published

Packages

No packages published

Languages