본문 바로가기
Android/기타

다양한 진입 방법에 대해 알아보자

by 안스 인민군 2022. 10. 28.

이번 주 회사에서 개발을 하다가 문제에 직면했다.

문제는 아래와 같다.

하나의 액티비티에 다양한 액티비티가 진입을 한다.

그런데 액티비티 D라는 녀석을 기능을 추가하여

액티비티A에 진입을 할건데 난 지금 D에서 넘어왔어. 라는 것을 액티비티 A에서 알고 싶다.

이 문제를 어떻게 해결할 것인가?

가장 기본적으로 우리 안드로이드의 액티비티 이동은 Intent를 사용하여 이동한다.

그럴 때 우리는 아래와 같은 방법으로 Intent 값에 이전 액티비티의 정보들 담아 넘겨준다.

넘겨줄때

val intent = Intent(this, SubActivity::class.java)
        intent.putExtra("key1","문자열 전달쓰")
        intent.putExtra("key2",2021)

받아올때

val value1 = intent.getStringExtra("key1")
// 아무런 값이 전달되지 않았을 때 디폴트 값 0 설정
val value2 = intent.getIntExtra("key2",0)

 

이제 "액티비티A에서 액티비티D에서 넘어왔다면 어떠한 동작을 설정해라"라는 동작을 작동할때

우리는 아마 액티비티D에서 putExtra에서 boolean이나 String으로 넘겨 줄 것이다.

그런데 생각을 해보면 boolean으로 넘겨주게 되면 "액티비티F" 라는것이 나중에 추가되어 그때도 어디서 진입했는지의 정보가 중요해진 순간일 때 구분해줄 수 없는 상황이 올것이다.

아님 String 으로 처리할 경우 받아오는 getStringExtra는 불필요한 곳에서는 null값이 된다는 것에 불편했었다.

나는 그래서 아래와 같은 StateClass를 만들어 주었다.

class WebEnterState{
     Enter enter;
     enum Enter{
         miraeasset_configFrgment,
         NOTHING
     }
 
     WebEnterState(String enter) {
         if(enter == null){
             this.enter = Enter.NOTHING;
             return;
         }
 
         switch (enter){
             case "miraeasset_configFrgment" :
                 this.enter = Enter.miraeasset_configFrgment;
                 break;
	         }
     }
 }

이렇게 하면 진입하기전에 어디에서 진입하였는가에 대한 확실한 구분이 가능할 것이라고 생각했다!