如何向 Android 的 NavigationView 上的项目添加点击事件
How to add click event to item on NavigationView of Android
我正在尝试在我的 Android 项目中实现补充工具栏 NavigationDrawer
。
为此,我在 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" />
在您的 Activity:
中实现侦听器
public class HomeActivity extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener
在 Activity
的 onCreate 中设置 NavigationItemSelectedListener
NavigationView mNavigationView = (NavigationView) findViewById(R.id.account_navigation_view);
if (mNavigationView != null) {
mNavigationView.setNavigationItemSelectedListener(this);
}
覆盖方法
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_account) {
// DO your stuff
}
}
你必须使用 OnNavigationItemSelectedListener(MenuItem item)
方法。
更多信息请查看此 documentation。
这是一个 Java 8 方法 更小的样板 ( 没有 "implements" 在 Activity).如果您的 class 是抽象的并且您不想在所有其他 child:
中实现此功能,这也很有帮助
@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;
}
我想确保 Nizam 的解决方案可以在 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
}
}
}
记住:Return类型必须是布尔值!
我正在尝试在我的 Android 项目中实现补充工具栏 NavigationDrawer
。
为此,我在 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" />
在您的 Activity:
中实现侦听器public class HomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener
在 Activity
的 onCreate 中设置 NavigationItemSelectedListenerNavigationView mNavigationView = (NavigationView) findViewById(R.id.account_navigation_view); if (mNavigationView != null) { mNavigationView.setNavigationItemSelectedListener(this); }
覆盖方法
public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_account) { // DO your stuff } }
你必须使用 OnNavigationItemSelectedListener(MenuItem item)
方法。
更多信息请查看此 documentation。
这是一个 Java 8 方法 更小的样板 ( 没有 "implements" 在 Activity).如果您的 class 是抽象的并且您不想在所有其他 child:
中实现此功能,这也很有帮助@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;
}
我想确保 Nizam 的解决方案可以在 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
}
}
}
记住:Return类型必须是布尔值!