반응형
MVVM 패턴으로 한번 만들어 보자라는 마음으로 시작했습니다.
Data Binding을 하기 위해선 먼저
Build.Gradle에서 dataBinding을 추가해줍니다.(App)
dataBinding{
enabled = true
}
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.example.makeaviewmodel.login.viewModel.LoginViewModel" />
</data>
<LinearLayout
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@color/colorPrimary">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginHorizontal="10dp"
android:layout_gravity="center_vertical">
<EditText
android:layout_height="match_parent"
android:layout_width="match_parent"
android:inputType="text"
android:hint="@string/id"
android:privateImeOptions="defaultInputmode=english"
android:text="@={viewModel.userId}"
app:OnFocusChangeListener="@{viewModel::onFocusChangeId}"/>
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginHorizontal="10dp"
android:layout_gravity="center_vertical"
android:layout_marginTop="40dp">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="textPassword"
android:hint="@string/pw"
android:privateImeOptions="defaultInputmode=english"
android:text="@={viewModel.password}"
setOnEditorActionListener="@{viewModel.editorActionListener}"/>
</FrameLayout>
</LinearLayout>
</layout>
여기서 보면,
hint는 res/value/strings.xml에 등록 시킨 이름을 넣어줬습니다
text로 값을 가지고 오는 부분은, "@={}"로 바인딩을 처리합니다.
<data>
<variable
name="viewModel"
type="com.example.makeaviewmodel.login.viewModel.LoginViewModel" />
</data>
먼저 viewModel이라는 이름으로 작성해주고
type은 선언한 객체들을 사용하기 위함이었습니다. 그렇다면 LoginViewModel에는 먼저 선언을 해준 객체들이 존재합니다.
LoginViewModel.java
public MutableLiveData<String> userId;
public MutableLiveData<String> password;
LoginActivity.java
public class LoginActivity extends AppCompatActivity {
private ActivityLoginBinding binding;
private LoginViewModel loginViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_login);
binding.setLifecycleOwner(this); //이 객체가 이 액티비티의 라이프사이클을 참조하면서 데이터가 변경되거나 하면 refresh 시키겠다
loginViewModel = new ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication())).get(LoginViewModel.class);
binding.setViewModel(loginViewModel);
}
}
데이터 바인딩은 이런 식으로 진행하면 될 것 같다.
반응형
'언어 공부 > Android' 카테고리의 다른 글
[Android] Retrofit2, Rxjava2, OkHttp에 대해서 알아보자 (0) | 2020.09.29 |
---|---|
[Android/JAVA] Adapter ..LayoutInflater.. ViewHolder 어렵다.. (0) | 2020.09.21 |
[[Android/JAVA]] observe.. 문자열 Resource.. (0) | 2020.09.18 |
[Android/JAVA] SharedPreferences / SplashActivity (0) | 2020.09.17 |
[Android] 안드로이드 생명주기 및 MVVM (0) | 2020.09.17 |
댓글