0

데이터 바인딩 라이브러리를 사용하여 새 앱을 구현 중입니다. 안타깝게도 탐색 창에서 양방향 바인딩의 예제를 찾을 수 없습니다 (android.support.v4.widget.DrawerLayout 사용). 서랍 레이아웃에는 (android.support.v7.widget.SwitchCompat를 사용하여) 몇 가지 변경 가능한 텍스트와 두 개의 토글 전환이 포함되어 있습니다.NavigationDrawer의 Android 양방향 데이터 바인딩

이 시나리오에서 데이터 바인딩을 사용하는 것이 합리적입니까? 이것을 구현하는 방법에 대한 아이디어가 있습니까? 누구든지 이런 종류의 구현을위한 예제 코드를 가지고 있습니까?

+1

?? – vjamit

+0

내 [답변] (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

답변

2

이 시나리오에서 데이터 바인딩을 사용하는 것이 합리적입니까?

정말 아키텍처에 따라 다릅니다. 데이터 바인딩은 종종 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); 
    } 
}