淺談android MVVM 讓你的代碼更簡潔

最近項目需要 開始研究MVVM 以前是萬年MVC 千年MVP 呵呵 悶騷程序猿自我舒緩。

好 剛開始研究
MVVM是將“數據模型數據雙向綁定”的思想作為核心,因此在View和Model之間沒有聯系,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數據的變化會同時修改數據源,而數據源數據的變化也會立即反應到View上。

M 即model 模型
V 即View 視圖
VM 即ViewModel 視圖模型 
 MVVM模式是Model-View-ViewMode模式的簡稱。由視圖(View)、視圖模型(ViewModel)、模型(Model)三部分組成。通過這三部分實現UI邏輯、呈現邏輯和狀態控制、數據與業務邏輯的分離。
 當然也有很多好處 低耦合 細分工 簡介高效
好 今天就說一下 MVVM綁定數據
第一步 準備工作
在app的build.gradle文件裡 android{}裡添加
dataBinding {
enabled = true
}

到此 準備工作結束 非常簡單
第二步 模型 例如這樣 今天綁定數據 textview imgeview 以及刷新
1 textview 非常簡單 使用瞭以後 你絕對不會在想mvc的 findViewById();
我要顯示名字和年齡還有性別
student 數據類
private String name;
private String sex;
private String age;
// 構造方法
public Student(String name, String sex, String age) {
this.name = name;
this.sex = sex;
this.age = age;
}
setget方法自己寫 此處就不多說瞭
mvc 中我們都是以幾個佈局控件作為根節點 mvvm 中要用layout 作為根節點 同時引用data 標簽添加數據類
data/
/ variable/
name=”student”
type=”com.sxm.mvvmdemo.viewbeans.Student”
/variable/
/data
LinearLayout
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”>
TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:textSize=”20sp”
android:textColor=”#ec4729”
android:text=”@{student.name}”
TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:textSize=”15sp”
android:textColor=”#434542”
android:text=”@{student.sex}”
TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:textSize=”10sp”
android:textColor=”#5ed427”
android:text=”@{student.age}”
LinearLayout>
好 佈局完成 activity中給數據類賦值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
Student student = new Student(“孫中山”,”男”,”45”);
binding.setStudent(student)
}
運行一下 就可以顯示瞭
2 點擊事件
variable
name=”onclick”
type=”android.view.View.OnClickListener”/variable>
TextView
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”center”
android:textSize=”20sp”
android:onClick=”@{onclick}”
android:clickable=”true”
android:id=”@+id/name”
android:text=”@{student.name}”/>
binding.setOnclick(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “點擊瞭”, Toast.LENGTH_SHORT).show();
}
});
也可以添加id 進行添加點擊事件 可以直接找到這個控件
binding.name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, “又點擊瞭”, Toast.LENGTH_SHORT).show();
}
});
3 綁定圖片
// 圖片數據類
public class ImgView extends BaseObservable {
int picid;
@Bindable
public int getPicid() {
return picid;
}

public void setPicid(int picid) {
    this.picid = picid;
    notifyPropertyChanged(BR.picid);
}
@BindingAdapter("android:src")
public static void setPic(ImageView img,int picid){
    img.setImageResource(picid);
}

}
data>
import type=”com.sxm.mvvmdemo.viewbeans.ImgView”>/import>
data>
這次我們使用導入的方式 比 / variable/ 還要簡潔

You May Also Like