我试图访问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中束的功能。
对抽屉菜单项响应点击正确的方法是通过在活动实施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;
}
我有有异曲同工之妙示例项目,以使听者菜单上的项目。希望这可以帮助
@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);
}