티스토리 뷰
직전 포스팅인 Navigation Drawer 을 다루면서 생성한 Fragment 객체는 이전에 봤던 Fragment객체의 형태와 많이 달라있었다.
이전처름 Fragment객체를 생성한 뒤, Fragment클래스를 상속받아서 inflate해주는 코드 한 줄만 구성한 것이 아닌, 아래와 같이 ViewModel 객체를 상속 받은 FragmentModelView클래스를 Fragment 클래스와 함께 생성하였다.
◎SlideshowViewModel.java
package com.example.callenge.ui.slideshow;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class SlideshowViewModel extends ViewModel {
private MutableLiveData<String> mText;
public SlideshowViewModel() {
mText = new MutableLiveData<>();
mText.setValue("This is slideshow fragment");
}
public LiveData<String> getText() {
return mText;
}
}
◎SlideshowFragment.java
package com.example.callenge.ui.slideshow;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import com.example.callenge.R;
public class SlideshowFragment extends Fragment {
private SlideshowViewModel slideshowViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
slideshowViewModel =
new ViewModelProvider(this).get(SlideshowViewModel.class);
View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
final TextView textView = root.findViewById(R.id.text_slideshow);
slideshowViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
}
위 코드는 프래그먼트 혹은 액티비티 간에 데이터를 전달할 때, onSaveInstanceState() 메서드를 사용하여 onCreate()의 번들에서 데이터를 복원하는 기법이 데이터가 복잡하거나 직렬화/역직렬화가 불가능한 데이터인 경우 사용하는데 한계가 있기 때문에 아예 데이터의 소유권을 UI 컴포넌트에서 분리하기 위해 ViewModel을 사용한 코드이다.
ViewModel 객체에 대한 자세한 Reference는 구글의 안드로이드 공식 문서에 잘 나와있다.
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] 브로드캐스트 수신자 이해하기 (0) | 2022.03.30 |
---|---|
[Android] Service 1: Service 이해하기 (0) | 2022.03.29 |
[Android] Navigation Drawer (0) | 2022.03.27 |
[Android] View Pager2 (0) | 2022.03.25 |
[Android] Tab 2: 하단 Tab 구성 (0) | 2022.03.24 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- 맛집
- await
- 이탈리안 레스토랑
- redux
- javascript
- AsyncStorage
- Async
- 정보보안기사 #실기 #정리
- 인천 구월동 맛집
- 인천 구월동 이탈리안 맛집
- 파니노구스토
- react-native
- Promise
- react
- redux-thunk
- Total
- Today
- Yesterday