Android开发 -- MVVM 是什么、MVVM框架、快速入门、简单使用、通俗解释

全文阅读预计 10 分钟

这可能是你看过的最清晰明了的讲解

主题 👇

写在前面:我们为什么要用框架?当人们发明出一件新事物时,伴随着喜悦和喝彩,随之产生的问题是如何批量去生产这些新事物,毕竟新事物的产生是为了给更多人去使用。比方说我们发明了一辆小汽车,那么我们如何同时兼顾快速、高效、少出错、可迭代等优点来进行批量生产呢,那么就出现了框架,框架是人们思想一步步进步优化总结得出的结果,就像汽车工厂中的造车机器人摆放在工厂的哪个地方更好,其它的机器摆放到哪里效率最高,我们可能换了一个又一个的地方摆放,最终总结出了对于这个结论的框架,那么下次我们再在其它地方开一个汽车工厂的时候我们只需要将总结出来的框架套用在新的地方就可以再次快速搭建出一个汽车工厂。

代码中的框架也是如此,想想看你封装的东西是不是都是为了便于下次更快速的使用,那么也有大牛帮你总结出了一套如何快速开发你的程序又能避免出错多、迭代难的问题。学习框架可以大幅缩短你开发时间,减少加班时长~ 不掉发,从每猿做起

MVVM:即 Model - View - ViewModel 模式

  • View:用来做用户与手机交互方面的事,不要在 View 中做业务逻辑(例如:Activity、Fragment、Dialog 等等,只要是用户能看到的)
  • ViewModel:用来处理业务逻辑 不做任何 UI 相关的事(也就是 View 的事)(简单来说就像是 ViewModel 的中介,可以从 Model 获取数据给 View 展示)
  • Model:用来处理数据存储获取(就像一个数据库一样,能存能取)

还不知道 Lifecycles 是什么?请进入此链接学习我对于 ViewModel 的快速及通俗讲解。

还不知道 LiveData 是什么?请进入此链接学习我对于 ViewModel 的快速及通俗讲解。

还不知道 ViewModel 是什么?请进入此链接学习我对于 ViewModel 的快速及通俗讲解。

使用 👇

引入 ViewModel 和 LiveData

我们来实现一个小功能

// build.gradle
dependencies {
    // ViewModel and LiveData
    def lifecycle_version = "2.1.0"
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    // 或
    // implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"
    // 前者创建一个变量主要是便于管理,假如说你还引入了 lifecycle 的其它东西那么他们都同时使用这个变量的版本号就好,以后升级版本的时候只需要改一个地方
}

功能实现

// Model
class User {
    String name;
    int age;
}
// ViewModel
public class SecondViewModel extends ViewModel {
    private MutableLiveData<List<User>> userList;

    MutableLiveData<List<User>> getUserList() {
        if (userList == null) {
            userList = new MutableLiveData<>();
            loadUsers();
        }
        return getUserList();
    }

    private void loadUsers() {
        // 模拟请求网络接口
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                List<User> list = new ArrayList<>();
                list.add(new User());
                // ... 添加多个测试数据
                list.add(new User());
                userList.setValue(list);
            }
        }, 2000);
    }
}
// View
public class SecondActivity extends AppCompatActivity {
    private SecondViewModel mModel;
    private RecyclerView recyclerView;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        recyclerView = findViewById(R.id.recycler_view);

        mModel = ViewModelProviders.of(this).get(SecondViewModel.class);
        mModel.getUserList().observe(this, new Observer<List<User>>() {
            @Override
            public void onChanged(List<User> users) {
                recyclerView.setLayoutManager(new LinearLayoutManager(SecondActivity.this));
                recyclerView.setAdapter(new SecondAdapter());
                // SecondAdapter 就是简单的一个 RecyclerView 的 Adapter 了没什么好讲的
            }
        });
    }
}

文末 👇

大功告成,简单的一个 MVVM 框架就写好了,我们可以看到,Model、ViewModel、View 三者都是分离的,View 中只处理了界面展示,ViewModel 只处理数据,Model 提供了一个模板,三者分离后,代码显得很清晰,快去你的代码中试试吧~

码字不易,还请动动小手左侧栏中点赞 👍,3Q

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值