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!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章