Фрагменты перекрываются на OnBackPress в навигационном ящике / фрагменте - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в Android и работаю с фрагментами. Я использую активность навигационного ящика с фрагментами. Весь код работает нормально. Но проблема в том, что когда я перехожу к нескольким фрагментам и открываю фрагмент из панели навигации и нажимаю кнопку «Назад», фрагменты накладываются друг на друга. И все фрагменты повторяются, когда я открываю их один за другим. Я использую этот код для навигации: Это мой код HomeFragment

requests.setOnClickListener(new View.OnClickListener() {
             @Override
            public void onClick(View v) {
            ConrequestsFragment fragment = new ConrequestsFragment();
            FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.nav_host_fragment, fragment);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
        }
    });

Example Screenshot

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Проблема была только тогда, когда я перехожу из панели навигации к разным фрагментам. Я нашел решение и добавил этот код в свой MainActivity. java Вот код:

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home,R.id.nav_profile, R.id.nav_gallery, R.id.nav_status, R.id.nav_package,R.id.nav_contact)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);

    navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
        @Override
        public void onDestinationChanged(@NonNull NavController controller, @NonNull
                NavDestination destination, @Nullable Bundle arguments) {

            if (destination.getId() == R.id.nav_home) {
                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }
            }
            if (destination.getId() == R.id.nav_profile) {
                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }
            }
            if (destination.getId() == R.id.nav_gallery) {
                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }

            }
            if (destination.getId() == R.id.nav_status) {
                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }

            }
            if (destination.getId() == R.id.nav_package) {

                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }
            }
            if (destination.getId() == R.id.nav_contact) {

                int backStackCount = getSupportFragmentManager().getBackStackEntryCount();
                for (int i = 0; i < backStackCount; i++) {
                    int backStackId = getSupportFragmentManager().getBackStackEntryAt(i).getId();
                    getSupportFragmentManager().popBackStack(backStackId,
                            FragmentManager.POP_BACK_STACK_INCLUSIVE);
                }
            }
        }
    });
0 голосов
/ 07 мая 2020

Думаю, вам нужно добавить белый фон в макет xml по фрагментам, а также использовать android: clickable = "true" & android: focusable = "true". Попробуйте это и дайте мне знать, если вы есть проблемы.

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