⭐️⭐️ 안드로이드 액티비티는 스택에 계속 쌓이기 때문에 각 액티비티의 흐름을 제어해줄 필요가 있다. ⭐️⭐️
-> 이때 Intent Flag를 이용하여 제어할 수 있음!!
1. setFlags: 하나의 flag를 지정한다.
2. addFlags: 기존 flag + 새 flag
기존 코드) 로그아웃 -> 첫 화면으로 넘어감
문제점) 뒤로가기 눌렀을 때 전의 기록이 다 남는다는 걸 깨달음..!!
해결) 플래그 설정
Intent.FLAG_ACTIVITY_CLEAR_TOP
실행하는 액티비티가 스택에 있으면 새로 시작하지 않고 상위 스택 모두 제거
ex. [ABCDE]가 있고, E에서 C를 열면 상위 DE제거
Intent.FLAG_ACTIVITY_SINGLE_TOP
액티비티가 이미 최상단에 있으면 다시 시작하지 않고 재사용
ex. [ABCDE]가 있고, E에서 E를 열면 onPause()->onNewIntent() -> onResume()
Button logoutButton = (Button) findViewById(R.id.logoutButton);
logoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MemberPageActivity.this, "로그아웃 되었습니다.", Toast.LENGTH_SHORT).show();
Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
}
});
회원탈퇴 부분도 수정해줬다.
service.userDelete(new DeleteData(input_pw, input_id)).enqueue(new Callback<DeleteResponse>() {
@Override
public void onResponse(Call<DeleteResponse> call, Response<DeleteResponse> response) {
DeleteResponse result = response.body();
Toast.makeText(MemberPageActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show();
if (result.getCode() == 200) {
Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
}
}
로그아웃을 했을 때는 로그인 창에 아이디/비밀번호가 그대로 남고(?) 회원탈퇴를 했을 때는 모두 없어지게 했다!
(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)
회원탈퇴 - 액티비티가 재시작)
[참고] https://jhshjs.tistory.com/50
'* > Android' 카테고리의 다른 글
[안드로이드] ② Palette (0) | 2022.09.28 |
---|---|
[안드로이드] ① Manifest / 4대 컴포넌트 / Intent (0) | 2022.09.27 |
[안드로이드] Jsoup 사용해서 웹 크롤링 (0) | 2021.10.02 |
[안드로이드] 이미지뷰 크기 조절 (0) | 2021.10.01 |
[안드로이드] 다이얼로그 플로우 연동 (0) | 2021.09.04 |