我是靠谱客的博主 孤独画板,最近开发中收集的这篇文章主要介绍Android 官方示例:android-architecture 学习笔记(四)之todo-databinding项目结构模块分析总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

项目地址:https://github.com/googlesamples/android-architecture/tree/todo-databinding/

项目结构

本项目基于todo-mvp(后文所说”对比之前的项目”,即是说的它),并使用了Data Binding library 来将数据绑定并显示到UI元素上,如图
这里写图片描述
本项目,不遵循一个严格的Model-View-ViewModel或Model-View-Presenter模式,因为它同时使用ViewModel和Presenter

模块分析

added it task模块

包addedittask,下的AddEditTaskFragment,看下它的主要代码:

public class AddEditTaskFragment extends Fragment implements AddEditTaskContract.View {

    private AddEditTaskContract.Presenter mPresenter;

    private AddtaskFragBinding mViewDataBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        super.onCreateView(inflater, container, savedInstanceState);
        if (mViewDataBinding == null) {
            mViewDataBinding = AddtaskFragBinding.inflate(inflater, container, false);
        }
        mTitle = mViewDataBinding.addTaskTitle;
        mDescription = mViewDataBinding.addTaskDescription;

        setHasOptionsMenu(true);
        // Fragment is retained simply to persist the edits after rotation.
        setRetainInstance(true);
        return mViewDataBinding.getRoot();
    }
}

AddEditTaskFragment实现了MVP中V的接口。在onCreateView()中,使用了数据绑定框架生成binding class ——— AddtaskFragBinding。根据数据绑定框架定义,应该一个对应的布局名为addtask_frag.xml。查看res/layout下果然有该xml。

statistics模块

查看包结构目录,发现多了一个StatisticsViewModel类。

public class StatisticsViewModel implements StatisticsContract.View

它实现了MVP中的V的接口。再看下StatisticsFragment的代码:

public class StatisticsFragment extends Fragment {

    private StatisticsPresenter mPresenter;

    private StatisticsFragBinding mViewDataBinding;

    private StatisticsViewModel mStatisticsViewModel;

    public static StatisticsFragment newInstance() {
        return new StatisticsFragment();
    }

    public void setPresenter(@NonNull StatisticsPresenter presenter) {
        mPresenter = checkNotNull(presenter);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mViewDataBinding = DataBindingUtil.inflate(
                inflater, R.layout.statistics_frag, container, false);
        View root = mViewDataBinding.getRoot();
        return root;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mViewDataBinding.setStats(mStatisticsViewModel);
    }

    @Override
    public void onResume() {
        super.onResume();
        mPresenter.start();
    }

    public void setViewModel(StatisticsViewModel statisticsViewModel) {
        mStatisticsViewModel = statisticsViewModel;
    }

    public boolean isActive() {
        return isAdded();
    }
}

这个类的代码不长,就全贴了。StatisticsPresenter就不说了。成员属性还有StatisticsFragBinding和StatisticsViewModel。生命周期函数onCreateView中,初始化了mViewDataBinding;onActivityCreated中,绑定了mStatisticsViewModel。
再看下statistics_frag.xml主要内容:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <import type="android.view.View" />
        <variable
            name="stats" type="com.example.android.architecture.blueprints.todoapp.statistics.StatisticsViewModel" />
    </data>
    <LinearLayout>
     ....
    </LinearLayout>
</layout>

对于variable-stats,数据绑定框架会生成一组getter和setter,名为SetStats(StatisticsViewModel model)和 StatisticsViewModel getStats()。

总结

本项目基本就是这两种架构方式。更多的学习成本在Data Binding框架上,为此专门翻译了一下官方的 Data Binding Library 文档

最后

以上就是孤独画板为你收集整理的Android 官方示例:android-architecture 学习笔记(四)之todo-databinding项目结构模块分析总结的全部内容,希望文章能够帮你解决Android 官方示例:android-architecture 学习笔记(四)之todo-databinding项目结构模块分析总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部