使用環境:
項目框架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!