상세 컨텐츠

본문 제목

[안드로이드] ViewModel - 화면 회전 시 데이터 초기화 막는 방법

안드로이드

by aries574 2022. 5. 11. 12:08

본문


 이번 시간에는 화면 전환 시 데이터가 초기화되는 현상을 막는 방법에 대하여 알아보겠습니다. 이전 포스팅에 이어서

 진행하니 미리 보고 오시면 되겠습니다. 

2022.05.10 - [안드로이드] - [안드로이드] DataBinding 컴포넌트 쉽게 접근하는 방법

 

[안드로이드] DataBinding 컴포넌트 쉽게 접근하는 방법

이번 시간에는 DataBinding를 통해 레이아웃 컴포넌트에 쉽게 접근하는 방법에 대하여 알아보겠습니다. 목차 1. 실행 화면 2. dataBinding 설정 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActi..

aries574.tistory.com


목차

1. 실행 화면

2. 라이브러리 등록

3. ViewModel 클래스 만들기

4. 메인 화면 수정 activity_main.xml

5. 메인 코드 수정 MainActivity.java


1. 실행 화면

 

 

2. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'androidx.lifecycle:lifecycle-viewmodel:2.4.1'

 

3. ViewModel 클래스 만들기

 - 설명 - 

 1. MainActivity에서 관리하던 score 변수를 옮겼습니다. 

 2. scorePlus() score변수값을 증가시킵니다.

 3. scoreMinus() score변수값을 감소시킵니다.

public class MainViewModel extends ViewModel {

    int score = 0;

    public MainViewModel() {

        Log.d("MainViewModel", "MainViewModel 생성");
    }

    @Override
    protected void onCleared() {
        super.onCleared();
        Log.d("MainViewModel", "MainViewModel 종료");
   }

   public void scorePlus(){
        score++;
   }

   public void scoreMinus(){
       score--;
   }
}

 

 

4. 메인 화면 수정 activity_main.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"
    xmlns:tools="http://schemas.android.com/tools">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <Button
            android:id="@+id/plus_btn"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_alignParentTop="true"
            android:text="더하기"
            android:textSize="25sp"/>

        <TextView
            android:id="@+id/score_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:textSize="100sp" />

        <Button
            android:id="@+id/minus_btn"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_alignParentBottom="true"
            android:text="빼기"
            android:textSize="25sp"/>
    </RelativeLayout>
</layout>

 

5. 메인 코드 수정 MainActivity.java

- 설명 - 

  1. MainActivity에서 있던 score 변수가 MainViewModel클래스로 옮겨가면서 화면 회전 시 액티비티 초기화로 인해 변수까지 초기화되는 현상이 사라졌습니다. 

 2. score값을 증가시키고 감소시키는 기능도 MainViewModel클래스로 옮겨서 코드가 훨씬 깔끔해졌습니다. 

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;

    MainViewModel mainViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //초기화
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        mainViewModel = new ViewModelProvider(this).get(MainViewModel.class);
        Log.d("MainActivity", "OnCreate");
        
        //ViewModel에서 score값 가져옴
        binding.scoreText.setText(String.valueOf(mainViewModel.score));
        
        //마이너스 버튼
        binding.minusBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mainViewModel.scoreMinus();
                binding.scoreText.setText(String.valueOf(mainViewModel.score));
            }
        });

        //플러스 버튼
        binding.plusBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mainViewModel.scorePlus();
                binding.scoreText.setText(String.valueOf(mainViewModel.score));
            }
        });

    }//onCreate
}//MainActivity

2022.04.29 - [안드로이드] - [안드로이드] LineChart 만드는 방법 part1 - 기본 구현

 

[안드로이드] LineChart 만드는 방법 part1 - 기본 구현

이번 시간에는 LineChart를 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity.java 1. 실행 화면 2. 라이브러리 등록..

aries574.tistory.com

2022.04.08 - [안드로이드] - [안드로이드] Tab Custom Animation part1 - 화면 구성

 

[안드로이드] Tab Custom Animation part1 - 화면 구성

이번 시간부터 TabLayout을 직접 만들어 애니메이션까지 넣어보는 방법을 알아보겠습니다. 이번 포스팅은 화면 구성을 해보겠습니다. 목차 1. 실행 화면 2. 테마 변경 3. 배경 색상 파일 만들기(drawab

aries574.tistory.com

2022.03.20 - [안드로이드] - [안드로이드] ToDoList SQLite 만드는 방법 part1 - 화면과 DB

 

[안드로이드] ToDoList SQLite 만드는 방법 part1 - 화면과 DB

이번 시간에는 ToDoList SQLite 할 일 목록 화면과 DB부분을 만들어 보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. ToDo 클래스 만들기 4. ToDo DB 만들기 5. ToDo 화면 만들기 6. 메인 화면 구성 acti..

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역