마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 스튜디오 바텀네비게이션 위치 설정

0 추천
바텀네비게이션으로 탭이 3개 구현중인데 마지막 탭에서 스위치로 다크모드 라이트모드 설정 이벤트를 처리중인데 그 이벤트 처리 후 홈 화면으로 이동하는데 하단 탭이 누르고 있는 버튼은 마지막 작업을 했던 설정 탭에서 홈으로 이동 하지않는데 홈 화면으로 돌리는 방법좀 알려주세요 ㅠㅠ
kyuriezman (200 포인트) 님이 2021년 11월 9일 질문

1개의 답변

0 추천

테스트를 해보면, 안드로이드의 기본 동작은 Dark Mode를 설정할 때 현재 액티비티가 다시 생성이 되고 BottomNavigationView가 마지막 프레그먼트의 상태를 기억해 복구를 해줍니다. Dark Mode 설정 후 홈 프레그먼트로 돌아간다는 거는 프레그먼트 스택을 잘못 사용하고 계실 수도 있다는 의미이니 이 부분은 확인을 해보시구요.

프레그먼트의 전환을 특이한 방법으로 하거나 한게 아니면, Fragment.OnBackStackChangedListener를 통해 프레그먼트가 바뀌는 걸 감지할 수 있고, BottomNavigationView는  menu를 설정해서 쓰므로 BottomNavigationView.getMenu()를 통해 메뉴를 가져와서 원하는 메뉴아이템을 찾을 수 있고 setChecked를 통해 현재 보이는 화면에 해당하는 메뉴로 선택이 가능합니다.

기본적인 코드를 아래처럼 될 것 같습니다.

getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_activity_main);
                if (currentFragment != null) {
                    String tag = currentFragment.getTag();
                    if ("Home".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_home).setChecked(true);
                    }

                    if ("Dashboard".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_dashboard).setChecked(true);
                    }

                    if ("Notification".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_notifications).setChecked(true);
                    }
                }
            }
        });


 

코드는 일단 어떻게 되는지만 보여드리기 위해 정리되지 않은 상태입니다.

currentFragment.getTag는 FragmentManager를 통해 Fragment를 replace를 할 때 마지막에 전달하는 Tag값입니다.

public @NonNull FragmentTransaction replace(
    @IdRes int containerViewId,
    @NonNull Fragment fragment,
    @Nullable String tag
)

 

spark (226,420 포인트) 님이 2021년 11월 9일 답변
spark님이 2021년 11월 9일 수정
...