이 시나리오에서 데이터 바인딩을 사용하는 것이 합리적입니까?
정말 아키텍처에 따라 다릅니다. 데이터 바인딩은 종종 MVVM 아키텍처와 함께 사용됩니다 (익숙하지 않은 경우 this example 참조). 그러나 어쨌든 코드를 일관되게 작성하는 것을 선호한다면 데이터 바인딩을 일반적인 findViewById()
과 섞어 쓰고 싶지 않을 것입니다. 데이터 바인딩이 모든 곳에서 이루어지기를 원합니다.
구현은 다른 데이터 바인딩의 경우와 크게 다르지 않습니다.
public class MainActivityVM {
private ObservableField<String> mMutableText = new ObservableField<>();
private ObservableBoolean mOptionEnabled = new ObservableBoolean(false);
public MainActivityVM() {
//Your stuff here. E.g., you can add a listener to track the switch toggle:
mOptionEnabled.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (mOptionEnabled.get()) {
//Do some stuff if the user turned the switch on
}
}
});
mMutableText.set("Hello world!");
}
public ObservableField<String> getMutableText() {
return mMutableText;
}
public void setOptionEnabled(ObservableBoolean optionEnabled) {
this.mOptionEnabled = optionEnabled;
}
public ObservableBoolean isOptionEnabled() {
return mOptionEnabled;
}
}
보기 모델이 같은 활동에 바인딩해야합니다 :
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View"/>
<variable
name="VM"
type="your.package.name.MainActivityVM"/>
</data>
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Put your main activity content here-->
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{VM.mutableText}"
tools:text="Sample text" />
<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="@={VM.optionEnabled}"
android:text="Option"/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</layout>
보기 모델은 해당 게터가 있어야합니다 레이아웃 (이 예에서는 R.layout.act_main
이름)는 양방향 바인딩을 가져야한다
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActMainBinding binding = DataBindingUtil.setContentView(this, R.layout.act_main);
MainActivityVM viewModel = new MainActivityVM();
binding.setVM(viewModel);
}
}
?? – vjamit
내 [답변] (http://stackoverflow.com/questions/33962548/how-to-data-bind-to-a-header/38846146#38846146) 또는 [블로그] (http : // tonyz93 .blogspot.hk/2016/08/learn-data-binding-of-android.html)을 참조하십시오. – Tony