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

NavigationView 질문입니다..

0 추천
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                int id = item.getItemId();

                if(id == R.id.nav_0){
                    onFragmentSelected(0,null);
                } else if(id == R.id.nav_1){
                    onFragmentSelected(1,null);
                } else if(id == R.id.nav_2){
                    onFragmentSelected(2,null);
                }

                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                return false;
            }
        });
    }

    @Override
    public void onFragmentSelected(int position, Bundle bundle) {
        Fragment curFragment = null;

        if(position == 0) {
            curFragment = fragment1;
           toolbar.setTitle("첫번째 화면");
        } else if (position == 1){
            curFragment = fragment2;
           toolbar.setTitle("두번째 화면");
        } else if (position == 2){
            curFragment = fragment3;
           toolbar.setTitle("세번째 화면");
        }
        getSupportFragmentManager().beginTransaction().replace(R.id.container,curFragment).commit();
    }

현재 Navigation  뷰에 3개의 아이템을 넣어서 Fragment부분에서 만약 네비게이션안의 첫번째 버튼을 클릭하면 첫번째 화면, 두번째 버튼을 누르면 두번째 화면 이런식으로 만들고 싶습니다. 

현재 햄버거 모양을 누르고 첫번째 화면을 누르면 첫번째 화면까지 나오고 다시 햄버거 모양을 누르는 상황에서 팅깁니다.. 

 

 @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

오류가 여기서 발생하는데 무슨 의미인지 잘 모르겠습니다 ㅠㅠㅠ

로논 (360 포인트) 님이 2022년 1월 22일 질문

1개의 답변

0 추천
 
채택된 답변
어떤 에러인지 에러메세지를 올려보세요.

NavigationItemSelectedListener 안에서 SupportFragmentManager의 transaction을 처리하는 부분은 Navigation Component가 내부적으로 처리하는 일이라서 사용하시면 안될 것 같아 보이네요. 그리고 Fragment의  타이틀 설정하는 코드도 좀 이상합니다.
Navigation Component에서 다른 화면 이동은 navController.navigate입니다. 직접 프레그먼트를 조작하지 마세요.

그리고 아래링크에 가셔서 가이드대로 세팅을 하셨는지 다시 체크를 해보세요.

https://developer.android.com/guide/navigation/navigation-ui

위의 페이지에 가시면 Navigation Component를 UI와 연결하는 방법이 나옵니다. 여기에 나온대로 처리를 하셔야 Navigation Component가 Toolbar, Navigation Drawer, Bottom Navigation등과 제대로 동작하게 됩니다.

전체를 천천히 읽어보시고

https://developer.android.com/guide/navigation/navigation-ui#add_a_navigation_drawer

위의 섹션에 Navigation Drawer와 연결하는 방법이 나옵니다.

구글의 codelabe도 해보시고 github 샘플들도 참고하세요.

https://developer.android.com/codelabs/android-navigation#0

https://github.com/android/architecture-components-samples
spark (226,420 포인트) 님이 2022년 1월 22일 답변
로논님이 2022년 1월 22일 채택됨
...