이번 주 회사에서 개발을 하다가 문제에 직면했다.
문제는 아래와 같다.
하나의 액티비티에 다양한 액티비티가 진입을 한다.
그런데 액티비티 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;
}
}
}
이렇게 하면 진입하기전에 어디에서 진입하였는가에 대한 확실한 구분이 가능할 것이라고 생각했다!
'Android > 기타' 카테고리의 다른 글
하단 이슈에 대해 (0) | 2022.11.03 |
---|---|
생명주기에 대해서 (0) | 2022.11.03 |
Datastore에 대해 알아보자 (0) | 2022.10.23 |
SDK location not found. Define location with an ANDROID_SDK_ROOT environment variable or by setting the sdk.dir path in your project's local properties file.. (1) | 2022.10.12 |
안드로이드 최신버젼 오류 잡는법 (0) | 2022.10.09 |