第五步,我本就很累,为什么还需要做这么多事? Configurator 的到来,为我分担任务

第五步,我本就很累,为什么还需要做这么多事? Configurator 的到来,为我分担任务

前言

学会分工,相互合作

目标

1、我本就很累,为什么还需要做这么多事? Configurator 的到来,为我分担任务

2、添加更多的事件回调,让我们掌握全局。

实现代码

先上代码,有🐎有真相

public class MainActivity_v5 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Configurator.<String>of()
                .data("1", "2", "3", "4")
                .itemTypes((position, data) -> position % 2)
                .dataBinds((holder, data) -> holder.provide().setText(R.id.tv_test, data), 0, 1)
                .createItemViews((layoutInflater, parent) -> layoutInflater.inflate(R.layout.item_test, parent, false), 0)
                .createItemViews((layoutInflater, parent) -> layoutInflater.inflate(R.layout.item_test_3, parent, false), 1)
                .bind(findViewById(R.id.rv_test), new LinearLayoutManager(this));
    }

}
public class Configurator<T, VH extends RecyclerView.ViewHolder> {

    public static final int TYPE_ALL = -1;

    private ViewHolderFactory<VH> viewHolderFactory;
    private DataProvider<T> dataProvider;
    private DataClassifier<T> dataClassifier;

    private Observable<ItemViewFactory> itemViewFactories = new Observable<>();
    private Observable<DataBinder<T, VH>> dataBinders = new Observable<>();

    private OnAttachedToRecyclerViewListener<T, VH> attachedToRecyclerViewListener;
    private OnCreatedViewHolderListener<VH> createdViewHolderListener;
    private OnViewAttachedToWindowListener<VH> viewAttachedToWindowListener;


    public Configurator(ViewHolderFactory<VH> viewHolderFactory) {
        dataProvider = ListDataProvider.of();
        this.viewHolderFactory = ObjectUtils.requireNonNull(viewHolderFactory, "viewHolderFactory");
        this.dataClassifier = (position, data) -> TYPE_ALL;
    }

    public Configurator<T, VH> itemTypes(DataClassifier<T> dataClassifier) {
        this.dataClassifier = dataClassifier;
        return this;
    }

    public Configurator<T, VH> dataBinds(DataBinder<T, VH> dataBinder, int... viewTypes) {
        if (ArrayUtils.isEmpty(viewTypes)) {
            this.dataBinders.register(TYPE_ALL, dataBinder);
        } else {
            for (int type : viewTypes) {
                this.dataBinders.register(type, dataBinder);
            }
        }
        return this;
    }

    public Configurator<T, VH> createItemViews(ItemViewFactory itemViewFactory, int... viewTypes) {
        if (ArrayUtils.nonEmpty(viewTypes)) {
            this.itemViewFactories.register(TYPE_ALL, itemViewFactory);
        } else {
            for (int viewType : viewTypes) {
                this.itemViewFactories.register(viewType, itemViewFactory);
            }
        }
        return this;
    }

    public Configurator<T, VH> data(T... data) {
        dataProvider.addAll(data);
        return this;
    }

    public Configurator<T, VH> setAttachedToRecyclerViewListener(OnAttachedToRecyclerViewListener<T, VH> attachedToRecyclerViewListener) {
        this.attachedToRecyclerViewListener = attachedToRecyclerViewListener;
        return this;
    }

    public Configurator<T, VH> setViewAttachedToWindowListener(OnViewAttachedToWindowListener<VH> viewAttachedToWindowListener) {
        this.viewAttachedToWindowListener = viewAttachedToWindowListener;
        return this;
    }

    public Configurator<T, VH> setCreatedViewHolderListener(OnCreatedViewHolderListener<VH> createdViewHolderListener) {
        this.createdViewHolderListener = createdViewHolderListener;
        return this;
    }

    public void bind(RecyclerView recyclerView, RecyclerView.LayoutManager layoutManager) {
        CommonlyAdapter<T, VH> adapter = new CommonlyAdapter<>(
                viewHolderFactory,
                ContextProvider.of(recyclerView),
                dataProvider,
                dataClassifier,
                itemViewFactories,
                dataBinders,
                this.viewAttachedToWindowListener,
                this.attachedToRecyclerViewListener,
                this.createdViewHolderListener
        );
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(layoutManager);
    }

    public static <T, VH extends RecyclerView.ViewHolder> Configurator<T, VH> of(ViewHolderFactory<VH> viewHolderFactory){
        return new Configurator<>(viewHolderFactory);
    }

    public static <T> Configurator<T, CommonlyViewHolder> of(){
        return of((itemView, viewType) -> new CommonlyViewHolder(itemView));
    }

}

public class CommonlyAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
    private LayoutInflater layoutInflater;
    private ViewHolderFactory<VH> viewHolderFactory;
    private ContextProvider contextProvider;
    private DataProvider<T> dataProvider;
    private DataClassifier<T> dataClassifier;

    private Observable<ItemViewFactory> itemViewFactories;
    private Observable<DataBinder<T, VH>> dataBinders;
    private OnViewAttachedToWindowListener<VH> viewAttachedToWindowListener;
    private OnAttachedToRecyclerViewListener<T, VH> attachedToRecyclerViewListener;
    private OnCreatedViewHolderListener<VH> createdViewHolderListener;

    public CommonlyAdapter(ViewHolderFactory<VH> viewHolderFactory,
                           ContextProvider contextProvider,
                           DataProvider<T> dataProvider,
                           DataClassifier<T> dataClassifier,
                           Observable<ItemViewFactory> itemViewFactories,
                           Observable<DataBinder<T, VH>> dataBinders,
                           OnViewAttachedToWindowListener<VH> viewAttachedToWindowListener,
                           OnAttachedToRecyclerViewListener<T, VH> attachedToRecyclerViewListener,
                           OnCreatedViewHolderListener<VH> createdViewHolderListener) {
        this.layoutInflater = LayoutInflater.from(contextProvider.provide());
        this.viewHolderFactory = viewHolderFactory;
        this.contextProvider = contextProvider;
        this.dataProvider = dataProvider;
        this.dataClassifier = dataClassifier;
        this.itemViewFactories = itemViewFactories;
        this.dataBinders = dataBinders;
        this.viewAttachedToWindowListener = viewAttachedToWindowListener;
        this.attachedToRecyclerViewListener = attachedToRecyclerViewListener;
        this.createdViewHolderListener = createdViewHolderListener;
    }

    @Override
    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
        if (ObjectUtils.nonNull(attachedToRecyclerViewListener)){
            attachedToRecyclerViewListener.onAttachedToRecyclerView(contextProvider, this, recyclerView);
        }
    }

    @Override
    public void onViewAttachedToWindow(@NonNull VH holder) {
        super.onViewAttachedToWindow(holder);
        if (ObjectUtils.nonNull(viewAttachedToWindowListener)){
            viewAttachedToWindowListener.onViewAttachedToWindow(holder);
        }
    }

    @NonNull
    @Override
    public VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ItemViewFactory factory = itemViewFactories.getObserver(viewType);
        ObjectUtils.requireNonNull(factory, "itemViewFactory");
        VH holder = viewHolderFactory.createViewHolder(factory.createItemView(layoutInflater, parent), viewType);
        if (ObjectUtils.nonNull(createdViewHolderListener)){
            createdViewHolderListener.onCreatedViewHolder(holder);
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull VH holder, int position) {
        DataBinder<T, VH> dataBinder = dataBinders.getObserver(holder.getItemViewType());
        if (ObjectUtils.nonNull(dataBinder)) {
            dataBinder.bind(holder, dataProvider.getData(position));
        }
    }

    @Override
    public int getItemCount() {
        return dataProvider.getDataCount();
    }

    @Override
    public int getItemViewType(int position) {
        return dataClassifier.getItemType(position, dataProvider.getData(position));
    }
}

  哈哈,把事情分出去了,我终于轻松了也不用那么累了,只负责自己的事情,把自己能做的做到最好。现在看看整体的结构好像已经有血有肉了。
  真的是这样吗?现在好像还是没有达到我们的目标,易于扩展,现在只是整个RecyclerViewAdapter构造比较简单,我们还需要努力。

下节预告

1、插件的出现,终于可以不用在重复编写代码了

2、使得适配器内的属性在外部跟容易获取

加油!!!努力的人最帅!

link

作者
CommonlyAdapter系列文章

### 回答1: 我可以为您介绍下Da Vinci Configurator的使用方法,它是一个可视化和可定制的工具,可用于自动化和管理大规模机器学习工作流程。它可以帮助用户轻松配置和运行复杂的深度学习模型,并可以提供可视化的结果。 ### 回答2: Davinci Configurator是一种用于配置和定制嵌入式系统的软件工具。它主要用于汽车领域,可用于配置和管理汽车电子系统的参数和功能。 使用Davinci Configurator,用户可以轻松地定义和编辑汽车电子系统的软件组件、参数和接口。它支持多种标准和协议,如AUTOSAR(汽车软件体系结构)、CAN(控制器区域网络)和LIN(局域网总线),以满足不同系统的要求。 Davinci Configurator提供了直观的图形用户界面,使用户能够可视化地管理和配置汽车电子系统。通过拖放、连接和编辑图形化组件,用户可以快速创建和编辑系统的配置。 此外,Davinci Configurator还提供了强大的验证和验证功能,以确保配置正确无误。用户可以通过模拟和测试来验证配置的合规性,并生成相关文档以支持系统开发的各个阶段。 总之,Davinci Configurator是一个功能强大且易于使用的工具,可以帮助用户有效地配置和定制嵌入式系统,尤其是在汽车电子领域。它的灵活性和可扩展性使其成为开发和管理复杂系统的理想选择。 ### 回答3: Davinci Configurator是一款功能强大的配置工具,主要用于开发和配置嵌入式系统。它提供了一个直观的用户界面,使用户能够轻松地配置和管理各种设备和功能。 Davinci Configurator具有以下主要功能: 1. 设备管理:用户可以添加、删除和修改各种设备,并配置它们的参数和属性。通过添加设备,用户可以构建整个嵌入式系统的模型。 2. 参数配置:用户可以根据特定的需求,配置每个设备的参数。这些参数包括硬件接口、通信协议和传输速率等。用户可以根据实际情况进行配置,并根据需要进行修改。 3. 通信管理:Davinci Configurator提供了简单且易于使用的通信管理界面。用户可以配置和管理设备之间的通信。这包括设置通信接口、定义消息格式和编码方式等。用户还可以通过增加和修改通信接口,实现设备之间的数据传输。 4. 数据导出:Davinci Configurator允许用户将配置数据导出到其他软件工具中。用户可以将配置数据导出为XML、Excel或其他常用的文件格式,以便与其他开发工具进行集成和共享。 总之,Davinci Configurator是一款非常实用的嵌入式系统配置工具。它能够帮助用户轻松地管理和配置各种设备,提高开发效率和准确性。无论是初学者还是有经验的开发人员,都可以通过使用Davinci Configurator来更好地理解和掌握嵌入式系统的开发流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值