如何在Android的NavigationView中为项目添加点击事件

12

我正在尝试在我的Android项目中实现侧边栏导航抽屉。为此,我在DrawerLayout中使用了NavigationView。为了显示条目,我使用了菜单。我想在添加的菜单项上添加点击事件。

参考代码: 在导航菜单中 -

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/nav_account" android:title="My Account"/>
    <item android:id="@+id/nav_settings" android:title="Settings"/>
    <item android:id="@+id/nav_layout" android:title="Log Out"/>
</menu>

在视图中:

<android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:menu="@menu/navigation_menu"
        android:layout_gravity="start" />
4个回答

45
  1. 在您的Activity中实现监听器:

    public class HomeActivity extends AppCompatActivity implements 
                  NavigationView.OnNavigationItemSelectedListener
    
  2. 在 Activity 的 onCreate 方法中设置 setNavigationItemSelectedListener

  3. NavigationView mNavigationView = (NavigationView) findViewById(R.id.account_navigation_view);
    
    if (mNavigationView != null) {
            mNavigationView.setNavigationItemSelectedListener(this);
    }
    
  4. 重写该方法

    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();
    
        if (id == R.id.nav_account) {
           // DO your stuff 
        }
    }
    

3

我希望确认 Nizam 的解决方案也能在 Kotlin 中找到,因为 Kotlin 正变得日益重要:

val mDrawerLayout = this.findViewById(R.id.drawer_layout) as DrawerLayout

val mNavigationView = findViewById<View>(R.id.navigation) as NavigationView

在onCreate方法中处理导航项,可以这样做:
mNavigationView.setNavigationItemSelectedListener { it: MenuItem ->
                when (it.itemId) {
                    R.id.nav_item1 -> doThis()
                    R.id.nav_item2-> doThat()
                    else -> {
                        true
                    }
                }
            }

记住:返回类型必须是布尔值!


太棒了,当我看到Java版本时,我认为将其转换为kotlin会很困难,但是你已经为我完成了所有工作,谢谢! - acmpo6ou

2
你需要使用OnNavigationItemSelectedListener(MenuItem item)方法。
更多信息请查看文档

0

这里是一个Java 8的方法,具有更小的样板文件(在Activity上没有"implements")。如果您的类是抽象的,并且您不想在每个其他子类中实现此功能,则也很有帮助:

@Override
protected void onCreate(
  Bundle savedInstanceState) {

  NavigationView navigationView =
    findViewById(
      R.id.navigationView);

  navigationView.setNavigationItemSelectedListener(
    MyActivity::onNavigationItemSelected);
}

public static boolean onNavigationItemSelected(MenuItem item) {

  if (item.getId() == R.id.my_item) {
    myItemClickHandler();
  }

  return false;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接