ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [안드로이드] 화면 회전시 데이터 유지하기
    Android/공부 2020. 6. 23. 17:14
    LifeCycle과 SaveInstanceState에 관한 예제
    • LifeCycle이란 한글로는 생명주기를 의미한다. 안드로이드 스튜디오는 6가지의 콜백 함수로 관리된다.

    • 화면을 회전시키면 액티비티가 지워지고 다시 만들어지는데, 이때 액티비티에 입력했던 정보가 모두 날아가게 된다. 매개변수 saveInstanceState에 이전 액티비티 상황을 Bundle 형태로 저장했다가 onCreate() 함수에 돌려받으면 화면 회전시에도 데이터를 유지하도록 만들 수 있다.

     

     

     

    1. xml

    1. activity_main.xml

     

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical"
        android:padding="4dp">
    
        <TextView
            android:id="@+id/level"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="레벨 : 0"/>
    
        <Button
            android:id="@+id/btn_levelup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="레벨 증가"
            android:onClick="onLevelup"/>
    
        <TextView
            android:id="@+id/score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="점수 : 0"/>
    
    
        <Button
            android:id="@+id/btn_scoreup"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="점수 증가"
            android:onClick="onScoreup"/>
    
    </LinearLayout>

       

     

     


    2. java

    1. MainActivity.java

    package com.example.mylifecycleex;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.os.PersistableBundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        public static final String STATE_LEVEL = "playLevel";
        public static final String STATE_SCORE = "playerScore";
    
        TextView level, score;
        int mLevel=0, mScore=0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            level = (TextView) findViewById(R.id.level);
            score = (TextView) findViewById(R.id.score);
    
            // 상태 저장
            if(savedInstanceState==null) {
            } else {
                mLevel = savedInstanceState.getInt(STATE_LEVEL);
                mScore = savedInstanceState.getInt(STATE_SCORE);
                level.setText(mLevel);
                score.setText(mScore);
            }
    
        }
    

     

     

        @Override
        public void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
            super.onSaveInstanceState(outState, outPersistentState);
    
            outState.putInt(STATE_LEVEL, mLevel);
            outState.putInt(STATE_SCORE, mScore);
        }
    
        public void onLevelup(View view) {
            mLevel++;
            level.setText("레벨 : " + mLevel);
        }
    
        public void onScoreup(View view) {
            mScore+=100;
            score.setText("점수 : " + mScore);
        }
    }

     

    • onSaveInstanceState는 Bundle에 저장되어야 할 상태 데이터를 저장한다. 이 객체는 액티비티가 재시작될 때, onCreate()와 onRestoreInstanceState()에 전달된다.

    • STATE_LEVEL, STATE_SCORE를 통해 level과 score 데이터가 저장되었다. 

     

     


    3. 결과화면

    ▼ 세로화면

     


     

    ▼ 화면을 가로로 회전시켰을때 화면

    댓글

Designed by Tistory.