Activity는 화면을 세로에서 가로로 돌렸을때 세로 일때 activity를 destroy한다음 가로 activity를 oncreate해서 생성한다 하지만 이때 ViewModel은 화면이 돌아가도 하나의 객체를 유지하는것을 확인 할수 있다
ViewModel을 만들때에는 ViewModel()을 상속 시켜줘야 한다
아래에는 구글 ViewModel 샘플코드이다.
class MyViewModel : ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
kotlin에서는
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Use the 'by viewModels()' Kotlin property delegate
// from the activity-ktx artifact
val model: MyViewModel by viewModels()
model.getUsers().observe(this, Observer<List<User>>{ users ->
// update UI
})
}
}
Java에서는
public class MyActivity extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {.
MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class);
model.getUsers().observe(this, users -> {
// update UI
});
}
}
ViewModelProvider 란것이 나온다
이 VIewModelProvider는 ViewModelStoreOwner란것을 받게 되어있는데
VIewModelStoreOwner 란 무엇일까?