我选择一个选项后抽屉没有关闭

问题描述 投票:0回答:1

抽屉打开并正常运行。当我选择一个选项时,它会更改为正确的碎片,但抽屉保持打开状态。怎么解决?

我的主要活动

package com.example.duolingo;

import static com.example.duolingo.R.id.nav_host_fragment_content_main;

import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;

import com.example.duolingo.databinding.ActivityMainBinding;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationView;

import java.util.Locale;


public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener  {

    private AppBarConfiguration mAppBarConfiguration;
    private ActivityMainBinding binding;
    private FrameLayout main_frame;
    private TextView drawerProfileName, drawerProfileText;

    private BottomNavigationView bottomNavigationView;
    private BottomNavigationView.OnNavigationItemSelectedListener onNavigationItemSelectedListener=
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                    switch (menuItem.getItemId())
                    {
                        case R.id.nav_home:
                            setFragement(new CategoryFragment());
                            return true;

                        case R.id.nav_leaderboard:
                            setFragement(new LeaderBoardFragment());
                            return true;

                        case R.id.nav_account:
                            setFragement(new AccountFragment());
                            return true;


                    }
                    return false;
                }
        };

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);



            binding = ActivityMainBinding.inflate(getLayoutInflater());
            setContentView(binding.getRoot());

            setSupportActionBar(binding.appBarMain.toolbar);

            bottomNavigationView=findViewById(R.id.bottom_nav_bar);
            main_frame= findViewById(R.id.main_frame);

            bottomNavigationView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener);


            DrawerLayout drawer = binding.drawerLayout;
            NavigationView navigationView = binding.navView;
            Passing each menu ID as a set of Ids because each
                menu should be considered as top level destinations.
                mAppBarConfiguration = new AppBarConfiguration.Builder(
                        R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
                stack overflow
                .setDrawerLayout(drawer)
                .build();


            drawerProfileName = navigationView.getHeaderView(0).findViewById(R.id.nav_drawer_name);
            drawerProfileText = navigationView.getHeaderView(0).findViewById(R.id.nav_drawer_text_img);

            String name = DbQuery.myProfile.getName();
            drawerProfileName.setText(name);

            drawerProfileText.setText(name.toUpperCase(Locale.ROOT).substring(0,1));

            setFragement(new CategoryFragment());

            NavController navController = Navigation.findNavController(this, nav_host_fragment_content_main);
            NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
            NavigationUI.setupWithNavController(navigationView, navController);

            navigationView.setNavigationItemSelectedListener(this);

        }

    private void setFragement(Fragment fragement)
    {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(main_frame.getId(),fragement);
        transaction.commit();

    }

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


    @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

            Log.d("edo","mphka1");
            int id = menuItem.getItemId();
            if (id == R.id.nav_home) {
                setFragement(new CategoryFragment());
                return true;
            }
            else if (id == R.id.nav_leaderboard) {
                Handle the gallery action
                    setFragement(new LeaderBoardFragment());
                return true;

            }
            else if (id == R.id.nav_account) {
                Handle the slideshow action
                    setFragement(new AccountFragment());
                return true;

            }



            DrawerLayout drawer = binding.drawerLayout;
            drawer.closeDrawer(GravityCompat.START);

            return true;
        }

    @Override
        public void onPointerCaptureChanged(boolean hasCapture) {
            super.onPointerCaptureChanged(hasCapture);
        }
}

content_main

 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@drawable/main_background"
 app:layout_behavior="@string/appbar_scrolling_view_behavior"
 tools:showIn="@layout/app_bar_main">
 
 
     <fragment
 android:id="@+id/nav_host_fragment_content_main"
 android:name="androidx.navigation.fragment.NavHostFragment"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 app:defaultNavHost="true"
 app:layout_constraintLeft_toLeftOf="parent"
 app:layout_constraintRight_toRightOf="parent"
 app:layout_constraintTop_toTopOf="parent"
 app:navGraph="@navigation/mobile_navigation" />
 
     <com.google.android.material.bottomnavigation.BottomNavigationView
 android:id="@+id/bottom_nav_bar"
 android:layout_width="0dp"
 android:layout_height="wrap_content"
 android:background="?android:attr/windowBackground"
 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintEnd_toEndOf="parent"
 app:layout_constraintStart_toStartOf="parent"
 app:menu="@menu/bottom_menu">
 
     </com.google.android.material.bottomnavigation.BottomNavigationView>
 
     <FrameLayout
 android:id="@+id/main_frame"
 android:layout_width="0dp"
 android:layout_height="0dp"
 app:layout_constraintBottom_toTopOf="@+id/bottom_nav_bar"
 app:layout_constraintEnd_toEndOf="parent"
 app:layout_constraintStart_toStartOf="parent"
 app:layout_constraintTop_toTopOf="parent">
 
     </FrameLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

如果我单击主页,抽屉将关闭。在我看来是因为 content_main 中的片段。

这两行正确吗?

DrawerLayout drawer = binding.drawerLayout;
drawer.closeDrawer(GravityCompat.START);
java android android-fragments navigation-drawer
1个回答
0
投票

if (id == R.id.nav_home) { setFragement(新 分类片段());
drawer.closeDrawer(GravityCompat.START);

            return true;
        }
© www.soinside.com 2019 - 2024. All rights reserved.