2

如果我添加了自定义项,以我的NavigationView菜单,就像这样:集数据NavigationView菜单项

Menu menu = navigationView.getMenu(); 

MenuItem item = menu.add("Item 1"); 

如何设置数据的项目(如一个对象),这样,当它的点击/选中,我可以将这些数据传递给它打开的活动?

回答

1

您无法设置/添加数据到菜单项。通过查看add()方法的documentation,就可以看出,您可以设置:

的groupId - INT:组标识符,这个项目应该成为其中的一部分。这可以用来定义批量状态更改的项目组。如果一个项目不应该在一个组中,通常使用NONE。

itemId - int:唯一的项目ID。如果您不需要唯一的ID,请使用NONE。

订单 - int:项目的订单。如果您不关心订单,请使用NONE。请参阅getOrder()。

标题 - CharSequence:要显示的项目文本。

因此:

您需要设置itemId和处理特定的任务中onNavigationItemSelected()

@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    int id = item.getItemId(); 

    if (id == R.id.id_of_menu_item_1) { 

     // handle intents and passing data 

    } else if (id == R.id.id_of_menu_item_2) { 

     // handle intents and passing data 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 
+1

是的,但我怎么设置**菜单项**上的数据,然后我可以传递给点击活动?例如,我怎样才能在物品上设置一个'用户'对象,然后当这个物品被选中时,让它发送到活动?在你的例子中,我只能在选择项目时传递数据。我需要的是能够将数据附加到项目上,然后在选定时获取该数据并将其传递给活动。 – user7556225

+0

除了id以外,您不会将任何类型的数据设置为菜单项。他们只能被点击。当它发生时,他们调用'onNavigationItemSelected()'方法。现在,您可以通过读取ID来识别哪个菜单项被点击并处理必要的任务。例如,创建'intent'并传递数据,或者执行其他任何你想要的任务 – Marat

+0

如果我的许多菜单项打开相同的活动,但需要传递不同的数据(本例中为对象)会怎么样? – user7556225

0

这是没有意义的我。 MenuItem类只保存与菜单项相关的属性。你不能在MenuItem实例中放置其他对象。看看关于MenuItem类:

MenuItem class

您可以使用存储库模式来获得当前活动的新的活动或负载对象所需的数据和使用意图传递给新的活动,只需创建一个Bundle,把你的序列化或可上载的对象。当你处理时,你可以做到这一点onNavigationItemSelected(MenuItem item)