全文阅读预计 10 分钟
这可能是你看过的最清晰明了的讲解
主题 👇
写在前面:我们为什么要用框架?当人们发明出一件新事物时,伴随着喜悦和喝彩,随之产生的问题是如何批量去生产这些新事物,毕竟新事物的产生是为了给更多人去使用。比方说我们发明了一辆小汽车,那么我们如何同时兼顾
快速、高效、少出错、可迭代
等优点来进行批量生产呢,那么就出现了框架,框架是人们思想一步步进步优化总结得出的结果,就像汽车工厂中的造车机器人摆放在工厂的哪个地方更好,其它的机器摆放到哪里效率最高,我们可能换了一个又一个的地方摆放,最终总结出了对于这个结论的框架,那么下次我们再在其它地方开一个汽车工厂的时候我们只需要将总结出来的框架套用在新的地方就可以再次快速搭建出一个汽车工厂。
代码中的框架也是如此,想想看你封装的东西是不是都是为了便于下次更快速的使用,那么也有大牛帮你总结出了一套如何快速开发你的程序又能避免出错多、迭代难的问题。学习框架可以大幅缩短你开发时间,减少加班时长~ 不掉发,从每猿做起
MVVM:即
Model - View - ViewModel
模式
- View:用来做用户与手机交互方面的事,不要在 View 中做业务逻辑(例如:Activity、Fragment、Dialog 等等,只要是用户能看到的)
- ViewModel:用来处理业务逻辑
不做任何 UI 相关的事(也就是 View 的事)
(简单来说就像是View
和Model
的中介,可以从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