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

BottomNavigationView 매칭오류

0 추천

각 버튼 클릭 시 프래그먼트 전환은 잘되는데

백그라운드실행 했다가 다시 돌아오면 버튼네비게이션과 프래그먼트의 위치가 달라요

ex)

1,2,3,4 프레그먼트 , 

1,2,3,4 버튼네비게이션뷰

4번째 화면에서 다른앱 갔다가 재실행 되었을때,

화면은 4번째인데 버튼네이게이션뷰는 1번째로 되있어요.

 

또 버튼네비게이션이 아닌 다른 임의의 버튼으로 프래그먼트를 replace 하면 

화면만 바뀌고 버튼네비게이션은 안바껴요

현재 화면을 기준으로 버튼도 매칭되었으면 좋겠는데

메서드가 selected 밖에 없는거 같은데 어쩌죠

 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                switch (item.getItemId()){
                    case R.id.tab1:
                        getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment1).commit();
                        return true;
                    case R.id.tab2:
                        getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment2).commit();
                        return true;
//                                case R.id.tab3:
//                                    getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment3).commit();
//                                    return true;
                    case R.id.tab4:
                        Bundle bundle = new Bundle();
                        bundle.putString("source",source);
                        fragment4.setArguments(bundle);
                        getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment4).commit();
                        return true;
                    case R.id.tab5:
                        getSupportFragmentManager().beginTransaction().replace(R.id.container,fragment3).commit();
                        return true;
                }

                return false;
            }
        });

 

show7777 (1,170 포인트) 님이 2021년 7월 8일 질문
show7777님이 2021년 7월 8일 수정

1개의 답변

0 추천
 
채택된 답변
첫번째는 이슈는 네비게이션 리스너의 switch 문들에 있는 return을 없애시고 마지막에 true로 리턴하도록 해보세요.

두번째 문제는, 네이게이션 컴포넌트를 쓰면 자동으로 처리해줄텐데, 안쓰시는 것 같으니, 화면 전환시에 아래의 메소드를 사용해서 선택해 주시면 될 것 같은데요.

https://developer.android.com/reference/com/google/android/material/navigation/NavigationBarView#setSelectedItemId(int)
spark (224,800 포인트) 님이 2021년 7월 8일 답변
show7777님이 2021년 7월 9일 채택됨
감사합니다
첫번째 swich 문들에 있던 return을 바꿧더니 프레그먼트에있던 getApplicationContext() Null이 떠버려서 return은 다시 원래대로 해놨는데
왜 이런 현상이 발생하나요?
그 부분은 네비게이션 리스너와는 관련이 없어 보이고, 위의 코드만 가지고는 정확하게 알 수가 없겠는데요.
...