본문 바로가기
개발/안드로이드 어플

안드로이드 어플 setFlags()를 사용해서 복수의 화면 이동

by 외노자개발 2022. 12. 7.
반응형

 

예를 들어 화면 1 → 화면 2 → 화면 3으로 이동한 후 화면 3 → 화면 1로 돌아가고 싶을 때가 있다. 그때 finish()를 사용할 수도 있지만, 화면이 많으면 어색해진다.그럴 때 setFlags()라는 메서드를 발견했기 때문에 사용해 보았다.

 

 

방법


새롭게 화면 1의 액티비티를 기동해, 지금까지 이동해 온 화면을 스택으로부터 삭제하는 것으로 실현할 수 있다.

 

    Intent intent = new Intent(SubActivity2.this, MainActvity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //이 인수는 스택 초기화
    startActivity(intent);

 

 

Intent.setFlags()


이번에는 스택 클리어 인수를 사용했지만, 그 밖에도 인수가 있다.
화면의 내용을 바꾸고 싶지 않았기 때문에 스택에 있는 화면 1을 사용하는 방법도 생각했지만, 화면 2, 3이 남는 것이 싫었기 때문에 스택 클리어를 사용했다.

 

 

setFlags()의 인수는 여러 가지 있으므로, 잘하면 스택의 화면을 사용하면서 불필요한 화면만 클리어하는 것도 할 수 있을지도 모른다.

 

 

 

스택의 특정 활동으로 돌아가기


A => B => C => D

A => B

D에 있고 B로 돌아가기

 

val intent = Intent(this, B_Activity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
startActivity(intent)

FLAG_ACTIVITY_SINGLE_TOP를 지정하지 않으면 일반적인 복귀 거동이 되지 않고, 화면이 재구축되어 버립니다.

버튼 연타에 의한 중복 기동도 막기 때문에, 신규 Activity에서도 유효한 방법입니다.

 

 

스택의 특정 Activity 호출


A => B => C => D

A => C => D => B

D에서 B를 호출

FLAG_ACTIVITY_REORDER_TO_FRONT를 사용합니다. 프런트는 스택의 톱입니다. 지정된 Activity가 스택에 있으면 이전 상태로 맨 위로 이동할 수 있습니다.

val intent = Intent(this, B_Activity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
startActivity(intent)

탭 기능을 구현하고 싶은 경우 등에 이용합니다.

 

지금 Activity를 새 Activity로 바꾸기


A => B => C => D

A => B => C => E

D에서 새 E로 교환

E를 추가하고 나서 D를 finish 해 두면 OK입니다.

val intent = Intent(this, E_Activity::class.java)
startActivity(intent)
finish()

 

 

지금의 Activity를 새롭게 재작성하기


A => B => C => D

D를 다시 만들기

 

val intent = Intent(this, this::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
startActivity(intent)

레이아웃이 복잡하고 부분적인 업데이트가 어려운 경우 등에 이용합니다.

반응형

댓글