【问题标题】:new activity won't start after clicked navigation drawer单击导航抽屉后,新活动将不会启动
【发布时间】:2018-08-26 02:05:10
【问题描述】:

我知道这个问题存在,但答案不适用于我的情况。 我有一个包含四个项目的导航抽屉,但是当我单击第一个(我现在正在处理的那个)时,我创建的新活动没有打开,我查看并尝试了我在互联网上找到的所有内容但似乎没有任何效果。 我对android studio有点陌生,所以我真的不知道如何解决这个问题。我使用的 android studio 版本是 3.0。 这是我的菜单 xml:

<?xml version="1.0" encoding="utf-8"?>
<!--Icons made by http://www.freepik.com
from "https://www.flaticon.com
is licensed by http://creativecommons.org/licenses/by/3.0/-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/m1" android:title="Agora Mall"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m2" android:title="Downtown Center"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m3" android:title="Galeria 360"
      android:icon="@drawable/ic_ammunition"/>
<item android:id="@+id/m4" android:title="Sambil"
      android:icon="@drawable/ic_ammunition"/>
</menu>

这是主要的活动类代码:

package com.example.arlet.storemaps;

import android.content.Intent;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.Window;

public class MainActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.open,  R.string.close);
    mDrawerLayout.addDrawerListener(mToggle);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(mToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch(item.getItemId()){
        case R.id.m1:
            Intent intent = new Intent(MainActivity.this, AgoraActivity.class);
            startActivity(intent);
            return true;
    }

    return super.onOptionsItemSelected(item);
}

}

【问题讨论】:

    标签: android android-studio android-studio-3.0


    【解决方案1】:

    您必须为抽屉式导航菜单实现onNavigationItemSelected()
    onOptionsItemSelected() 与工具栏选项菜单项有关。
    如果您创建一个新项目并选择

    ,您可以找到所有必要的代码

    导航抽屉活动

    作为 MainActivity 的类型。

    【讨论】:

    • 我真的不知道,如果我知道了,我很抱歉,我还是这个网站的菜鸟@mTak,我只是不想开始一个新项目,但我想我不得不,感谢您抽出宝贵时间回答我的问题。
    • @Ichigo 你做得很好,我不明白为什么
    • 对不起,打错了
    • @Ichigo 你会再次接受吗?
    • 好的,最后你说得对,我要重新创建主要活动,打扰了,谢谢你帮助我
    【解决方案2】:

    您可以通过以下方式处理导航抽屉项目点击:

    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    
            // This method will trigger on item Click of navigation menu
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
    
                //Check to see which item was being clicked and perform appropriate action
                switch (menuItem.getItemId()) {
                    //Replacing the main content with ContentFragment Which is our Inbox View;
                    case R.id.m1:
                        Intent intent = new  Intent(MainActivity.this, AgoraActivity.class);
                        startActivity(intent);
                        return true;
                        break;
                    case R.id.m2:
    
                        break;
                    case R.id.m3:
    
                        break;
                    case R.id.m4:
    
                        break;
    
                }
    
    
                menuItem.setChecked(true);
    
                return true;
            }
        });
    

    【讨论】:

    • 嗨,所以我尝试了你所说的,结合@Bosco 回答的内容,现在出现一个错误,表明需要一个方法调用:
    • 感谢您的关注,但我将重新创建 avtivity,再次感谢所有帮助
    【解决方案3】:

    您必须实现 NavigationView.OnNavigationItemSelectedListener 才能使抽屉项目完美运行

    将此添加到您的类声明中

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{
    // then overide this method to
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {        
            int id = item.getItemId();
            switch(id){
                case R.id.m1:
                    Intent intent = new Intent(MainActivity.this, AgoraActivity.class);
                    startActivity(intent);
                    return true;
                //other cases goes here
            }
            return super.onOptionsItemSelected(item);
        }
        //you might want to ovewrite this method too
        @Override
        public void onBackPressed() {
            if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
                mDrawerLayout.closeDrawer(GravityCompat.START);
            } else {
            super.onBackPressed();
        }
    }
    

    【讨论】:

    • 抱歉打扰了,这个方法有什么用呢?我理解上一个,但这个不太了解,感谢您抽出宝贵时间回答我的问题@Bosco。
    • onBackPressed 是在按下 android 后退按钮时触发的事件,if 语句检查抽屉是否打开并关闭它,否则它会在活动堆栈上执行后退按钮操作
    • 另外,当我添加工具部分时出现错误,需要我添加一些新方法。
    • 如果你使用的是android studio,重新创建activity并选择Navigation Drawer Activity,它会为你生成一切
    • 是的,这就是我要做的,感谢您的关注
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多