티스토리 뷰

 

Room 사용하는 방법 총정리 2탄

다루는 내용은

Room 사용해서 데이터 넣기, 미리작성한 DB파일 넣기 정도 되겠다.

 

1탄보러가기

 

자 이제 데이터를 불러와 화면에 띄우자

 

내가 작성하는 프로젝트에서는 Fragment 내 리사이클러뷰에 DB 내용을 띄워야 했는데,

액티비티에서 데이터를 세팅하고 가져오려는 무자비한 일을 하려다가 끝끝내 실패하고(당연)

Fragment에서 DB를 세팅한 뒤 Adapter를 통해 가져온 데이터를 리사이클러뷰에 뿌려주기로 한다(개비스콘ㄴ).

 

그래서 결론적으로 액티비티는 이 Fragment와 나중에 나올 Fragment2를 띄워주는 역할을 맡았다.

 

Fragment2에도 데이터가 필요해서 액티비티에서 가져오려고 했던건데..............

우선 잘 마무리한 다음에 시도해볼게요.. 근데 뷰모델의 생명주기는........^^ fragment 사이에서도 데이터 공유시에 사용한다며.......^^~ 일단 해보자(아직안해봄)

 

Fragment의 onCreate에서 ViewModelProvider를 통해 데이터를 받아오자.

 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWordViewModel = new ViewModelProvider(this).get(WordViewModel.class);
        mWordViewModel.getAllPalaces().observe(this, words -> {
            adapter.submitList(words); //submitList: 내가 만든 메서드
        });

    }

 

요렇게 해주자.

 

중간에 로그를 찍어보면서 확인했더니

이동 순서가

Fragment : onCreate(뷰모델생성, 뷰모델끝) - onCreateView

Adapter: 생성자 - <<onCreateViewHolder - ViewHolder - onBindViewHolder>>(반복) 인데

 

로그는

Fragment: onCreate(뷰모델생성) - onCreateView

Adapter: 생성자

Fragment: onCreate(뷰모델끝)

Adapter: <<onCreateViewHolder - ViewHolder - onBindViewHolder>>(반복) 이더라~

 

이거는 아마도

뷰모델끝<< 이 부분에서 어댑터에 데이터를 전달해야함을 의미하는데, 그래서 submitList를 사용.

 

근데 구글 코드랩은 어댑터가 ListAdapter를 상속해서 submitList가 지원되는데

나는 RecyclerView.Adapter를 상속하고 여기는 그런게 없으므로 그냥 메서드 하나를 만들어 변수 지정만 했다.

 

그리고 어댑터의 onBindViewHolder에서 데이터를 뿌려주면 1단계 끝이다

 

 

전체구조도

 

 

 

 

 

728x90

'#1 > Android' 카테고리의 다른 글

[Android] Appbar 앱바~!  (0) 2021.06.23
[Android] 나를 위한 구글 코드랩 링크 모음  (0) 2021.06.17
[Androd] Room 사용하기 - 1 데이터 편  (0) 2021.06.15
[Android] 안드로이드 레이아웃  (0) 2021.06.14
[Android] Observe  (0) 2021.06.10
댓글
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함