【问题标题】:Set data to NavigationView menu items将数据设置为 NavigationView 菜单项
【发布时间】:2017-02-14 18:32:34
【问题描述】:

如果我在NavigationView 菜单中添加自定义项,如下所示:

Menu menu = navigationView.getMenu();

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

如何为项目(如对象)设置数据,以便在单击/选择项目时将数据传递给它打开的活动?

【问题讨论】:

    标签: android android-menu navigation-drawer android-navigationview


    【解决方案1】:

    您不能为菜单项设置/添加数据。通过查看add()方法的documentation可以看出可以设置:

    groupId - int:此项目应属于的组标识符。这可用于定义批次状态更改的项目组。如果一个项目不应该在一个组中,通常使用 NONE。

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

    order - int:商品的顺序。如果您不关心订单,请使用 NONE。请参阅 getOrder()。

    title - 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;
    }
    

    【讨论】:

    • 是的,但是如何在 菜单项 上设置数据,然后我可以在点击时传递给活动?例如,如何在项目上设置User 对象,然后在选择该项目时将其发送到活动?在您的示例中,我只能在选择项目时传递数据。我需要的是能够将数据附加到项目,然后在选择时获取该数据并将其传递给活动。
    • 除了 id 之外,您不会为菜单项设置任何类型的数据。它们只能被点击。当它发生时,他们调用onNavigationItemSelected() 方法。现在,您可以通过读取 id 来识别单击了哪个菜单项并处理必要的任务。例如,创建intent 并传递数据,或执行您想要的任何其他任务
    • 如果我的许多菜单项打开相同的活动,但需要传递不同的数据(在这种情况下为对象)怎么办?
    • 每个菜单项应该有不同的 id。因此,onNavigationItemSelected 方法中有 if 语句。根据单击的菜单项的 ID,您将所需的数据传递给任何活动
    • @user7556225 答案对您有帮助吗?
    【解决方案2】:

    这对我来说没有意义。 MenuItem 类仅包含与菜单项相关的属性。您不能将其他对象放在 MenuItem 实例中。看看 MenuItem 类:

    MenuItem class

    您可以使用存储库模式获取新活动所需的数据或加载当前活动的对象并使用意图传递给新活动,只需创建一个Bundle 并将您的可序列化或可打包对象放在上面。你可以在处理onNavigationItemSelected(MenuItem item)时做这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-07
      • 2023-04-07
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多