我在操作栏中实现了一个菜单项系统,我试图让菜单项在单击后变得不可见,然后在单击不同的菜单项后再次变得可见。
这样做的原因是为了防止多次单击菜单项。
我在下面做了以下尝试,但是,我收到了空指针异常错误。我相信我可能需要在这里实现一些 if 语句,但我不确定如何去做。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.tasklistmenu,menu);
return true;
}//OnCreateOptionsMenu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.allTasks:
item.setVisible(false);
MenuItem notStartedStatus = findViewById(R.id.notStartedStatus);
notStartedStatus.setVisible(true);
MenuItem inProgressStatus = findViewById(R.id.inProgressStatus);
inProgressStatus.setVisible(true);
MenuItem completeStatus = findViewById(R.id.completeStatus);
completeStatus.setVisible(true);
日志错误
Attempt to invoke interface method 'android.view.MenuItem
android.view.MenuItem.setVisible(boolean)' on a null object reference
新代码
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem allTasks = menu.findItem(R.id.allTasks);
MenuItem notStartedStatus = menu.findItem(R.id.notStartedStatus);
MenuItem completeStatus = menu.findItem(R.id.completeStatus);
MenuItem inProgressStatus = menu.findItem(R.id.inProgressStatus);
if(tasksIsVisible) {
allTasks.setVisible(true);
} else {
allTasks.setVisible(false);
}
if(notStartedIsVisible) {
notStartedStatus.setVisible(true);
} else {
notStartedStatus.setVisible(false);
}
if(completeIsVisible) {
completeStatus.setVisible(true);
} else {
completeStatus.setVisible(false);
}
if(inProgressIsVisible) {
inProgressStatus.setVisible(true);
} else {
inProgressStatus.setVisible(false);
}
return true;
}//OnPrepareOptions
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.allTasks:
tasksIsVisible = false;
invalidateOptionsMenu();
最佳答案
仅更改 isVisible
变量是不够的。每次想要更改可见性时,都必须调用 setVisible()
方法。该方法不仅仅只是设置 boolean 值,因此仅更改 boolean 值是不行的。
将 isVisible
值更改为 false 后,您需要调用 invalidateOptionsMenu()
,它将通过调用 onPrepareOptionsMenu()
重新启动菜单> 再次。
public boolean onPrepareOptionsMenu(Menu menu)
{
MenuItem notStartedStatus = menu.findItem(R.id.notStartedStatus);
if(isVisible)
{
notStartedStatus.setVisible(true);
}
else
{
notStartedStatus.setVisible(false);
}
return true;
}
尝试使用此代码使菜单项不可见:
...
isVisible = false;
invalidateOptionsMenu();
...
关于java - 如何在操作栏上隐藏和显示菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56314877/