Android ViewModule + DataBinding双向绑定数据

使用环境:

              项目框架MVVM

项目地址:

              https://gitee.com/longlyblack_admin/MVVM_Databinding

              项目中通过三种方式实现双向绑定数据,有兴趣的朋友可以顺便看下,都是些最基础的用法。

              本篇只介绍其中一种: ObservableField

使用方法:

1 app下build.gradle添加相关依赖:

  implementation 'androidx.legacy:legacy-support-v4:1.0.0'
  implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'

   添加databinding依赖:

android {
    ...
 
    dataBinding {
        enabled = true
    }

}

2 bean类处理


public class Teacher extends ViewModel {

    public ObservableField<String> teacherName = new ObservableField<>();

    public ObservableField<String> getTeacherName() {
        return teacherName;
    }

    /**
     * 此方法MainActivity的xml文件中
     * 两个button的OnClick方法调用
     * @param view
     */
    public void setBean(View view){
        switch (view.getId()){
            case R.id.btnModuleAdd:
                teacherName.set("孙冰");
                break;
            case R.id.btnModuleDelete:
                teacherName.set("李娜");
                break;
                default:
        }
    }
}

3 修改MainActivity的xml文件,相关书写方式可参考dataBinding文档:https://developer.android.google.cn/jetpack

   

public class Teacher extends ViewModel {

    public ObservableField<String> teacherName = new ObservableField<>();

    public ObservableField<String> getTeacherName() {
        return teacherName;
    }

    /**
     * 此方法MainActivity的xml文件中
     * 两个button的OnClick方法调用
     * @param view
     */
    public void setBean(View view){
        switch (view.getId()){
            case R.id.btnModuleAdd:
                teacherName.set("孙冰");
                break;
            case R.id.btnModuleDelete:
                teacherName.set("李娜");
                break;
                default:
        }
    }
}

4 MainActivity 获取到Teacher对象,并进行绑定


public class MainActivity extends AppCompatActivity {

    TextView tvModuleResult;
    Button btnModuleAdd, btnModuleDelete;

    PickUpViewModule vm;
    MutableLiveData<Integer> number;

    Teacher teacher;
    ActivityMainBinding binding;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        initView();
    }

    private void initView() {
        tvModuleResult = findViewById(R.id.tvModuleResult);
        btnModuleAdd = findViewById(R.id.btnModuleAdd);
        btnModuleDelete = findViewById(R.id.btnModuleDelete);

        //第一种,使用PickUpViewModule(MutableLiveData)
        //        vm = ViewModelProviders.of(this).get(PickUpViewModule.class);
        //        binding.setViewModule(vm);
        //        MutableLiveData<String> str = vm.getNumber();
        //        str.setValue("99");
        //        str.observe(this, new Observer<String>() {
        //            @Override
        //            public void onChanged(String s) {
        //                tvModuleResult.setText(s);
        //            }
        //        });

        //第二种,使用User(BaseObservable)
        //        User user = new User("娜娜", "19");
        //        binding.setUser(user);

        //第三种,使用Teacher(ObservableField,ObservableChar,ObservableInt,ObservableLong,ObservableDoule……)
        teacher = ViewModelProviders.of(this).get(Teacher.class);
        teacher.teacherName.set("露娜");
        binding.setTeacher(teacher);
    }
}

  总结:

            仅仅是初级用法,但是有时间的话可以封装的更详细。databinding的出现,可适用于MVP,MVVM,VVM,节省了代码量,但是对与不入门的朋友且慎重。

            更多讨论,欢迎来询:88627109

            祝您编程愉快,永无BUG!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值