java - NavigationDrawer 不起作用,它在执行某些操作之前关闭

标签 java android

我创建了一个空 Activity ,然后将其更改为 DrawerLayout,每次打开菜单并单击某个项目时,抽屉都会关闭,但什么也没有发生,就像我只是打开和关闭它一样,无法执行任何其他操作.

这是布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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"
    tools:context=".MainActivity"
    android:id="@+id/navigation_home_drawer">

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:menu="@menu/mainmenu"
        >

    </com.google.android.material.navigation.NavigationView>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        >

        <com.google.android.gms.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.drawerlayout.widget.DrawerLayout>

这是 Java 代码

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, NavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mToggle;
    private MapView mMapView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = findViewById(R.id.navigation_home_drawer);

        mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open, R.string.close);

        mDrawerLayout.addDrawerListener(mToggle);
        mToggle.syncState();

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        NavigationView navigationView =findViewById(R.id.navigation);
        navigationView.setNavigationItemSelectedListener(this);


        mMapView = findViewById(R.id.map);

        initGoogleMap(savedInstanceState);

    }




    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {

        if(mToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        int id = menuItem.getItemId();
        switch (id) {
            case R.id.nav_home:{
                Intent i = new Intent(this, MainActivity.class);
                startActivity(i);
                finish();
                break;
            }
            case R.id.nav_profile: {
                Intent i = new Intent(this, ProfileActivity.class);
                startActivity(i);
                finish();
                break;
            }
            case R.id.nav_settings: {
                Intent i = new Intent(this, SettingsActivity.class);
                startActivity(i);
                finish();
                break;
            }
        }
        return true;
    }

}



这是菜单布局

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/nav_home"
        android:title="Home"
        android:icon="@drawable/ic_home_black_24dp">

    </item>
    <item
        android:id="@+id/nav_profile"
        android:title="My Profile"
        android:icon="@drawable/ic_person_black_24dp">

    </item>

    <item
        android:id="@+id/nav_settings"
        android:title="Settings"
        android:icon="@drawable/ic_settigs">

    </item>
</menu>

我在这个文件中也有 map 的代码,但这并不重要,当我从该菜单中选择一个项目时,我只想将 Activity 更改为该项目,但没有任何反应,只关闭导航,你能告诉我吗如果我忘记添加某些内容,或者我应该更改什么才能使导航正常工作?预先感谢您!

最佳答案

您可以使用此代码来制作抽屉导航:

    NavigationView navigationView;
    DrawerLayout drawerLayout;

       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
            navigationView = findviewbyid(R.id.nav_drawer_home);
            drawerLayout = findviewbyid(R.id.drawer_home);

            drawerLayout.requestLayout();
            setUpNavigationView();
        }

        private void setUpNavigationView() {
            navigationView.setNavigationItemSelectedListener(menuItem -> {
            switch (menuItem.getItemId()) {
                case R.id.nav_recharge:
                    break;
                case R.id.nav_offers:
                    break;
                case R.id.nav_rides:
                    break;
                case R.id.nav_refer_friend:
                    break;
                case R.id.nav_wallet:
                    break;
                case R.id.nav_about_us:
                    break;
                case R.id.nav_feedback:
                    break;
                default:
                    break;
            }
            if (menuItem.isChecked())
                menuItem.setChecked(false);
            else
                menuItem.setChecked(true);
            menuItem.setChecked(true);

            drawerLayout.closeDrawers();

            return true;
        });

        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
                R.string.openDrawer, R.string.closeDrawer) {
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
            }
        };
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
    }

   @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawers();
            return;
        }
        super.onBackPressed();
}

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_recharge"
        android:icon="@drawable/ic_recharge_wallet"
        android:title="Rechange Wallet" />
    <item
        android:id="@+id/nav_offers"
        android:icon="@drawable/ic_offers"
        android:title="Offer's" />
    <item
        android:id="@+id/nav_rides"
        android:icon="@drawable/ic_ride"
        android:title="Rides" />

    <item
        android:id="@+id/nav_refer_friend"
        android:icon="@drawable/ic_refer_friend"
        android:title="Refer a friend" />

    <item
        android:id="@+id/nav_wallet"
        android:icon="@drawable/ic_wallet_transfer"
        android:title="Wallet Transfer" />

    <item
        android:id="@+id/nav_about_us"
        android:icon="@drawable/ic_about_us"
        android:title="About Us" />

    <item
        android:id="@+id/nav_feedback"
        android:icon="@drawable/ic_feedback"
        android:title="Feedback" />
</group>

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/home_content"/>

    <com.google.android.material.navigation.NavigationView
        android:clickable="true"
        android:id="@+id/nav_drawer_home"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/nav_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

关于java - NavigationDrawer 不起作用,它在执行某些操作之前关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58567299/

相关文章:

java - 在 CMU sphinx4 中获取语言分数

java - Android - 多个选项卡中的相同内容

java - SerialPortEventListener 实现

java - 接口(interface)声明为NULL

android - SharedPreference - 空指针异常

Android - 从 EMV 信用卡读取可用的详细信息

java - Spring继承@Component并带有构造函数参数

android - 使用 adb 命令替换文件

android - 从android源代码构建

java - 分割从 Json 响应收到的字符串