【问题标题】:Navigation Menu buttons clickable in Navigation Drawer导航抽屉中可点击的导航菜单按钮
【发布时间】:2016-11-22 13:39:45
【问题描述】:

我已经到了创建导航抽屉的地步,但我不知道如何使抽屉中的按钮可点击。

我的MainActivity

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.drawerLayout);
        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;
        }
        else{
            switch (item.getItemId()){
                case R.id.nav_menu:
                    Toast.makeText(MainActivity.this, "Menu!", Toast.LENGTH_SHORT).show();
                    return true;
                case R.id.nav_setings:
                    Toast.makeText(MainActivity.this, "Settings!", Toast.LENGTH_SHORT).show();
                    return true;
            }
        }

        return super.onOptionsItemSelected(item);
    }
}

请注意onOptionsItemSelected 中的 switch 语句不起作用。

我的菜单 xml 如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/nav_menu"
          android:title="My Account"/>
    <item android:id="@+id/nav_setings"
          android:title="Settings"/>
    <item android:id="@+id/nav_logout"
          android:title="Log Out"/>

</menu>

那么,我的问题是如何使抽屉中的这些物品可点击?

【问题讨论】:

    标签: android navigation-drawer


    【解决方案1】:

    假设您的DrawerLayout 中还有一个NavigationView,您只需添加一个OnNavigationItemSelectedListener

    NavigationView navigation = (NavigationView) findViewById(R.id.navigation);
    
    navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch(item.getItemId()) {
                case R.id.nav_menu:
                    // Handle menu click
                    return true;
                case R.id.nav_settings:
                    // Handle settings click
                    return true;
                case R.id.nav_logout:
                    // Handle logout click
                    return true;
                default:
                    return false;
            }
        }
    });
    

    【讨论】:

    • 感谢您的帮助,我已经添加了这段代码,看起来它正在工作。只认为 Android Studio 警告它可能会产生 NUllPointerException - 如何解决这个问题?
    • @cheeroke 警告出现在哪一行?
    • 它突出了navigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {}的整个块
    • @cheeroke 嗯,这很奇怪,我没有得到同样的警告。在对setNavigationItemSelectedListener() 的调用周围添加一个空检查不会有什么坏处:if(navigation != null) { … }。尽管考虑到您只是在上一行中设置了 navigation 对象,但没有必要这样做。
    • hmm,添加@NonNull 并没有帮助,而是在if(navigation != null) { … } 工作。感谢您的帮助 - 谢谢。
    猜你喜欢
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多