корректная работа значков BottomNavigation

114
12 мая 2021, 00:30

при создании активити происходит выбор какой фрагмент отобразить на основе Extras в intent, и при выборе не первого фрагмента, а второго или третьего у BottomNavigation все равно выбранным остается первый значок соответствующий первому фрагменту. Помогите пожалуйста как их синхронизировать?

Код как создаётся фрагмент:

private BottomNavigationView.OnNavigationItemSelectedListener navListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;
            if (currentPageId == item.getItemId()) {
                return false;
            } else {
                currentPageId = item.getItemId();
                switch (item.getItemId()) {
                    case R.id.full_info:
                        selectedFragment = new FullFragment();
                        break;
                    case R.id.detailed_info:
                        selectedFragment = new DetailedFragment();
                        break;
                    case R.id.manage_scan:
                        selectedFragment = new ConnectionFragment();
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, selectedFragment).commit();
                return true;
            }
        }
    };

Код как выбирается какой фрагмент поставить:

if(savedInstanceState == null && whichFragment.equals("may_you_please_set_detailed_fragment")) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            DetailedFragment fragment = new DetailedFragment();
            transaction.replace(R.id.fragment_container, fragment);
            transaction.commit();
        } else {
            if(savedInstanceState == null) {
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                ConnectionFragment fragment = new ConnectionFragment();
                transaction.replace(R.id.fragment_container, fragment);
                transaction.commit();
            }
        }
Answer 1

При старте программы вам кроме выбора фрагмента так же нужно программно отмечать и пункт нижнего меню, делается это так:

BottomNavigationView bottomNavigationView;

дальше в функции onCreate():

bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(myNavigationItemListener);

и при выборе нужного фрагмента отмечайте нужный пункт меню:

bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id);

и тут пишете программный выбор пункта меню:

if(savedInstanceState == null && whichFragment.equals("may_you_please_set_detailed_fragment")) {
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            DetailedFragment fragment = new DetailedFragment();
            transaction.replace(R.id.fragment_container, fragment);
            transaction.commit();
            bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id); // тут отмечайте нужный вам пункт меню по id 
        } else {
            if(savedInstanceState == null) {
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                ConnectionFragment fragment = new ConnectionFragment();
                transaction.replace(R.id.fragment_container, fragment);
                transaction.commit();
                bottomNavigationView.setSelectedItemId(R.id.my_menu_item_id); // тут отмечайте нужный вам пункт меню по id
            }
        }
READ ALSO
Indexof не распознает кириллицу

Indexof не распознает кириллицу

Есть небольшая проблема - нужно найти индекс элемента в стринговом массиве с помощью IndexOfВот кусок моего кода:

84
Проблема с созданием glFramebuffer

Проблема с созданием glFramebuffer

не могу создать буфер кадра в своем приложении для андроид на javaПожалуйста, можете сказать, что я делаю не так

119
Как правильно спроектировать класс?

Как правильно спроектировать класс?

Необходимо спроектировать класс Friend с полями:

120
Сохранить вложения из Email

Сохранить вложения из Email

Хочется из входящих писем выбирать вложения типа doc, docx (возможно еще какие-то файлы документов)Написал метод, но он только лишь создает файлы...

99