使用setOnMenuItemClickListener当空对象引用

问题描述 投票:2回答:2

我试图访问setOnMenuItemClickedListener但我得到一个空对象引用。该错误消息是不是很具体,不告诉我哪个对象引起的空引用。我已经明确规定使用findViewById的MenuItem对象。菜单项本身处于“android.support.v4.widget.DrawerLayout”,这是主要活动的根源。

MenuItem item1 = findViewById(R.id.restore);

item1.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            return false;
        }
    });

所有上面的代码的距离mainactivites OnCreate中束的功能。

android
2个回答
0
投票

对抽屉菜单项响应点击正确的方法是通过在活动实施NavigationView.OnNavigationItemSelectedListener接口。

然后配置抽屉使用活动回调与您的onCreate下面的代码()方法

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this);

然后你就可以将项目在您添加到下方的activity.Method样品onNavigationItemSelected方法点击菜单作出回应:

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

       case R.id.restore: {
      //do somthing
            break;
        }  
    }
    //close navigation drawer
    mDrawerLayout.closeDrawer(GravityCompat.START);
    return true;
}

0
投票

我有有异曲同工之妙示例项目,以使听者菜单上的项目。希望这可以帮助

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        MenuItem menuItem = menu.findItem(R.id.action_cart);
        FrameLayout rootView = (FrameLayout) menuItem.getActionView();  // --> access like this

        ImageView imItemCount = rootView.findViewById(R.id.cart_badge);
        count = mainPresenter.checkNumCart();  
        new QBadgeView(getApplicationContext())
                .bindTarget(imItemCount)
                .setShowShadow(true)
                .setBadgeGravity(Gravity.TOP | Gravity.END)
                .setBadgeNumber(count);

        rootView.setOnClickListener(view -> {
            onOptionsItemSelected(menuItem);
        });


        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){

            case R.id.action_cart:
                if(count > 0){
                    startActivity(new Intent(MainActivity.this, OrderProductActivity.class));
                }else {
                    DesignUtil.showSimpleNotificationDialog(this, null, getString(R.string.cart_empty));
                }
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
© www.soinside.com 2019 - 2024. All rights reserved.