美文网首页
MVVM中实体类的两种写法,简单实用

MVVM中实体类的两种写法,简单实用

作者: 鼾声鼾语 | 来源:发表于2019-12-27 16:15 被阅读0次

1
说明:
1、首先继承BaseObservable类
2、给成员变量的get方法添加@Bindable注解
3、在成员变量的set方法的最后调用方法notifyPropertyChanged,其中里面的参数是在BR类中记录的变量,那些变量就是我们在XML中声明的那些啦,类似于安卓资源管理的R.java文件,不过这里管理的是布局XML的变量,是自动生成的。
在这里我又有问题要问了,之前我的实体类这么简约,现在变这么长,感觉不爽!
那么有没有简约版的呢,因为我很懒不想弄这么多代码?

public class User extends BaseObservable{ 
    public String name; 
    public int age; 
    public User(String name,int age){
        this.name = name;
        this.age = age;
    } 
    @Bindable 
    public String getName() {
        return name;
    } 
    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.user);
    }
     @Bindable 
    public int getAge() {
        return age;
    } 
    public void setAge(int age) {
        this.age = age;
        notifyPropertyChanged(BR.user);
    } 
}

1.1 实用方法:

public class MainActivity extends AppCompatActivity { 
    private User myUser; 
    private ActivityMainBinding myBinding;  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        myBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 
        myUser = new User("年龄",4); 
        myBinding.setUser(myUser); 
        myBinding.setButtonname("年龄+1"); 
        myBinding.ageButton.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                myUser.age++; 
                myBinding.setUser(myUser); 
            }
         }); 
    }
}

2、使用Observable数据类型
这是一个简约的方法,谷歌为我们提供了基于常用数据类型的Observable类型,就是我们熟悉的数据类型前面加上Observable组成。
例如:
Int类型对应ObservableInt
Boolean类型对应ObservableBoolean

public class User { 
    public ObservableField<String> name = new ObservableField<>(); 
    public ObservableInt age = new ObservableInt(); 
    public User(String name,int age){
        this.name.set(name);
        this.age.set(age);
    }    
}

2.1:实用方法

public class MainActivity extends AppCompatActivity {
    private User myUser;
    private ActivityMainBinding myBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
        myUser = new User("年龄",4);
        myBinding.setUser(myUser);
        myBinding.setButtonname("年龄+1");
        myBinding.ageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myUser.age.set(myUser.age.get()+1);
            }
        });
    }
}

参考文档:https://my.oschina.net/u/1175007/blog/613889

相关文章

网友评论

      本文标题:MVVM中实体类的两种写法,简单实用

      本文链接:https://www.haomeiwen.com/subject/smudoctx.html