Android 如何将新添加项的onClickListener设置为navigationview?

Android 如何将新添加项的onClickListener设置为navigationview?,android,onclicklistener,navigationview,programmatically-created,Android,Onclicklistener,Navigationview,Programmatically Created,我有一个带有2个组的navigationview,在其中一个组中,我使用以下示例以编程方式添加了一个新项: 如何为新添加的项创建和获取id,并在其上设置OnClickListener?(因为我想发送一些到数据库并获取) 我想创造这种行为: 我试着这样做: navigationView = findViewById(R.id.nav_view); Menu menu = navigationView.getMenu(); final MenuItem menuItem = me

我有一个带有2个组的navigationview,在其中一个组中,我使用以下示例以编程方式添加了一个新项:

如何为新添加的项创建和获取id,并在其上设置OnClickListener?(因为我想发送一些到数据库并获取)

我想创造这种行为:

我试着这样做:

navigationView = findViewById(R.id.nav_view);
    Menu menu = navigationView.getMenu();
    final MenuItem menuItem = menu.add(R.id.group1, Menu.NONE, 0,"Read").setIcon(R.drawable.ic_list);

    menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(HomeDrawerActivity.this, "Item clicked", Toast.LENGTH_SHORT).show();
            menuItem.setCheckable(true);
            if (drawer.isDrawerOpen(GravityCompat.START)){
                drawer.closeDrawer(GravityCompat.START);
            }
            return true;
        }
    });

另一个问题是addList方法。新添加的菜单未显示。仅当我直接在navigationView=findViewById之后添加菜单时,该项才会显示。如何添加多个项并为它们设置ClickListeners?

添加代码,没有人能在不看到您在代码中所做的事情的情况下帮助您。没有必要为每个新的
菜单项设置单独的
OnMenuItemClickListener
s。如果您在
add()
调用中为每个调用传递一个唯一的ID–而不是
菜单。无
–您可以使用
导航视图
上的单个
OnNavigationItemSelectedListener
来处理所有这些调用。我将在前面的一个类似问题中展示这一点。谢谢!让我看看它是如何工作的。“…当用户向组中添加新项目时,将创建项目。”–这并不意味着您不能为每个项目提供唯一的ID,尽管我现在看到我之前的评论有点误导。您不必使用ID来区分项目;我就是这样做的。您可以简单地使用
item.getTitle()
来区分
onNavigationItemSelected()
中的
MenuItem
s。我解决了这个问题,谢谢您的帮助!:)
  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.BlueTheme);
    setContentView(R.layout.activity_home_drawer);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TaskBottomSheet taskBottomSheet = new TaskBottomSheet();
            taskBottomSheet.showNow(getSupportFragmentManager(), "taskBottomSheet");
        }
    });
    drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    navigationView = findViewById(R.id.nav_view);
    if (!TextUtils.isEmpty(listName)) {
        addList(listName);
    }



    private void addList(String listName) {
    Menu menu = navigationView.getMenu();
    menu.add(R.id.group1, Menu.NONE, 0, listName).setIcon(R.drawable.ic_list);
}
navigationView = findViewById(R.id.nav_view);
    Menu menu = navigationView.getMenu();
    final MenuItem menuItem = menu.add(R.id.group1, Menu.NONE, 0,"Read").setIcon(R.drawable.ic_list);

    menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(HomeDrawerActivity.this, "Item clicked", Toast.LENGTH_SHORT).show();
            menuItem.setCheckable(true);
            if (drawer.isDrawerOpen(GravityCompat.START)){
                drawer.closeDrawer(GravityCompat.START);
            }
            return true;
        }
    });