MVP,MVVM

2018-08-16  本文已影响0人  android小菜鸡一枚

MVP全称是Model,View,Presenter

MVP开源实现

Android-Architecture

MVVM(Model-View-ViewModel)

相比MVP模式,MVVM将Presenter改为了ViewModel,同时实现View和ViewModel的双向绑定。View层的变化会自动导致ViewModel发生变化,ViewModel的数据变化也会自动实现View的刷新,

在Google I/O2015大会上,Android开发团队发布了官方的MVVM模式支持函数库Data Binding Library。Data Binding函数库的引入很简单,在使用到Data Binding的android module的build.gradle文件中加入下面的配置即可

android {
    dataBinding {
        enabled = true;
    }
}

Data Binding的布局以<layout>作为根布局标签,里面包含data和view两个标签,其中data标签用来实现数据绑定,view标签就是在没有使用Data Binding时这个页面的布局文件的根标签。

<?xml version='1.0' encoding='utf-8' ?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.shuixiu.example.User" />
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}"/>
    </LinearLayout>
</layout>
public class User {
    public final String firstName;
    public final String lastName;
    public User(String firstName,String lastName){
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main_activity);
        MainActivityBinding binding = DataBindingUtil.setContentView(this,R.layout.main_activity);
//        MainActivityBinding binding1 = MainActivityBinding.inflate(getLayoutInflater());
        // 如果在ListView或者RecyclerView的adapter中使用数据绑定,可以如下方式绑定
//        ListItemBinding binding = ListItemBinding.inflate(layoutInflater,viewGroup,false);
//        ListItemBinding binding = DataBindingUtil.inflate(layoutInflater,R.layout.list_item,viewGroup,false);
        User user = new User("Test","User");
        binding.setUser(user);
    }
}
<?xml version='1.0' encoding='utf-8' ?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable name="user" type="com.shuixiu.example.User" />
        <variable
            name="handlers"
            type="com.shuixiu.example.MyHandlers"/>
    </data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.firstName}"
            android:onClick="@{user.isFriend? handlers.onClickFriend:handlers.onClickEnemy}"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.lastName}"
            android:onClick="@{user.isFriend? handlers.onClickFriend:handlers.onClickEnemy}"/>
    </LinearLayout>
</layout>
《Android高级进阶》第16章 MVP模式及其在Android中的实践
《Android高级进阶》第17章 MVVM模式及Android DataBinding实战
上一篇 下一篇

猜你喜欢

热点阅读