gpt4 book ai didi

java - 如何在操作栏上隐藏和显示菜单项

转载 作者:行者123 更新时间:2023-12-02 09:51:10 25 4
gpt4 key购买 nike

我在操作栏中实现了一个菜单项系统,我试图让菜单项在单击后变得不可见,然后在单击不同的菜单项后再次变得可见。

这样做的原因是为了防止多次单击菜单项。

我在下面做了以下尝试,但是,我收到了空指针异常错误。我相信我可能需要在这里实现一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com