super.onBackPressed (); заставляет изображения возвращаться дублированными, потому что я вызываю это дважды. Как его переписать, чтобы решить эту проблему? - PullRequest
0 голосов
/ 10 июля 2020

Может ли кто-нибудь сказать мне, как сделать этот код более эффективным и чтобы super.onBackpressed(); вызывался только один раз.

Проблема в том, что то, как я его сейчас использую, - это единственный способ, которым он работает. Верхняя часть кода предназначена для NavigationView. Когда ящик открывается (, если он открыт), он закрывается. И вторая часть - изменить значки в BottomNavigationView, чтобы они соответствовали фрагменту, на котором находится пользователь, когда он нажимает кнопку Android назад. Проблема с этим способом заключается в том, что изображения возвращаются дублированными, когда я нажимаю кнопку Android назад.

Я пробовал разными способами получить только один super.onBackPressed();, но, как я уже упоминал ранее, если я избавьтесь от любого из них, страница не меняется.

Также пробовал менять значки в BottomNavigationView в onResume(); в разных фрагментах. Но почему-то приложение потом зависает и закрывается.

Как у меня сейчас. Изображения возвращаются дублированными

 @Override
    public void onBackPressed() {
        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START);
        }
        super.onBackPressed();

        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if (fragment instanceof HomeFragment) {
            mBottomNavigationView.setSelectedItemId(R.id.nav_home);
        } else if (fragment instanceof AttendingEventFragment) {
            mBottomNavigationView.setSelectedItemId(R.id.nav_save);
        } else if (fragment instanceof NotificationsFragment) {
            mBottomNavigationView.setSelectedItemId(R.id.nav_notifications);
        } else if (fragment instanceof ProfileFragment) {
            mBottomNavigationView.setSelectedItemId(R.id.nav_profile);
        }
        super.onBackPressed();
    }

Другие способы, которыми я пытался реализовать код ... Не работает ...

@Override
    public void onBackPressed() {
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START);
        } else {
            if (fragment instanceof HomeFragment) {
                mBottomNavigationView.setSelectedItemId(R.id.nav_home);
            } else if (fragment instanceof AttendingEventFragment) {
                mBottomNavigationView.setSelectedItemId(R.id.nav_save);
            } else if (fragment instanceof NotificationsFragment) {
                mBottomNavigationView.setSelectedItemId(R.id.nav_notifications);
            } else if (fragment instanceof ProfileFragment) {
                mBottomNavigationView.setSelectedItemId(R.id.nav_profile);
            }
        }
        super.onBackPressed();
    }

onResume () HomeFragment; - Сделал это для всех фрагментов, и приложение просто зависает, а затем закрывается ...

@Override
public void onResume() {
    super.onResume();
        mBottomNavigationView = mActivity.findViewById(R.id.bottomNavigation);
        mBottomNavigationView.setSelectedItemId(R.id.nav_home);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);

        if (context instanceof Activity) {
            mActivity = (Activity) context;
        }
    }

BottomNavigationView

private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener = menuItem -> {
        switch (menuItem.getItemId()) {
            case R.id.nav_home:
                mSelectedFragment = new TabLayoutFragment();
                break;
            case R.id.nav_notifications:
                seenNotification();
                mSelectedFragment = new NotificationsFragment();
                break;
            case R.id.nav_profile:
                SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
                editor.putString("profileid", Objects.requireNonNull(FirebaseAuth.getInstance().getCurrentUser()).getUid());
                editor.apply();
                mSelectedFragment = new ProfileFragment();
                break;
            case R.id.nav_save:
                mSelectedFragment = new AttendingEventFragment();
                break;
        }

        if (mSelectedFragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, mSelectedFragment, null).addToBackStack(null).commit();
        }

        return true;
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...