원인은, Global Action의 popUpToInclusive인 것으로 보이네요. popUpToInclusive는 poUpTo 와 같이 사용되며, true이면 popUpTo로 지정된 프레그먼트까지, false 이면 바로 전까지의 백스택을 클리어해줍니다.
네비게이션 그래프의 startingDestination은 항상 백스택의 마지막에 존재해야하기 때문에 pop시키시면 안됩니다. 로그인 후에도 그대로 남겨놓으셔야 합니다. 따라서 startingDestiantion으로 되어있는 loginFragment는 포함을 시키시면 안됩니다.
<!-- Global Action-->
<action
android:id="@+id/action_global_logInFragment"
...
app:popUpToInclusive="false"/>
이 경우, 한가지 신경쓰실 부분은 로그인 후에 홈에서 백버튼을 누를 때 LoginFragment로 가지않고 앱이 종료될 수 있는 코드를 추가해야 합니다.
앞에서 설명드린 대로, startingDestination 을 로그인 후의 엔트리가 되는 프레그먼트로 바꾸실 수도 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/login"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.lightweight.fragment.HomeFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/loginFragment"
android:name="com.example.lightweight.fragment.LogInFragment"
android:label="fragment_log_in"
tools:layout="@layout/fragment_log_in">
...
</fragment>
<action
android:id="@+id/action_global_logInFragment"
app:destination="@id/loginFragment"
app:popUpTo="@id/homeFragment"
app:popUpToInclusive="false" />
</navigation>
이 때 주의 하실 점은 HomeFragment가 nested graph에 있으면 안되고 같은 xml 파일 안에 있어야 한다는 점입니다.
그리고 CalendarFragment의 onAttatch와 onDetach에 있는 코드를 LoginFragment로 옮겨 보세요.
추가로,
++)))) 이것을 위해 LoginFragment를 Global Action으로 지정하고 바텀메뉴의 모든 프래그먼트에서 뒤로가기시 로그인 화면으로 돌아올 수 있게 하려했지만 뒤로가기를 눌러도 다시 로그인화면으로 돌아옵니다.
이 부분은 두번째 방법으로는 바로 되지는 않고, 리스너를 다시거나 해서 처리를 하셔야 할 것 같아요. 그리고 제가 보기에는 네비게이션이 약간 이상해 보입니다. 로그인 후에 유저가 Bottom Navigation 의 메뉴에 있는 화면에서 백을 하는 경우는 로그아웃이 아니라, 앱을 종료시키려고 하는 거거든요. 앱을 종료하려고 하는데 로그인 화면까지 이동해서 하게되면 이치에 맞치않아 보여요. 로그아웃은 별도의 로그아웃 버튼을 두시는게 맞을 듯 해요.