gpt4 book ai didi

java - 根据用户输入设置菜单项android

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:29 25 4
gpt4 key购买 nike

我已经阅读这里问题的答案几个小时了,但似乎没有解决方案适合我。

我正在为 DnD 角色创建创建一个 Android 应用程序,如果用户选择一个魔法类别,我想在主菜单中添加一个咒语书选项。

出于某种原因,无论我做什么,它都会根据 XML 显示可见或不可见,并且不会通过代码更改它。

这是我的 XML:

<?xml version="1.0" encoding="utf-8"?>

<!--TODO: create related icons-->

<group android:checkableBehavior="single">
<item
android:id="@+id/nav_profile"
android:title="Profile"
android:visible="true"/>
<item
android:id="@+id/nav_battle"
android:title="Battle"
android:visible="true"/>
<item
android:id="@+id/nav_items"
android:title="Items"
android:visible="true"/>
<item
android:id="@+id/nav_spellbook"
android:title="Spell Book"
android:visible="false"/>
</group>

这是 java 中的尝试 1:

public void classBasedTraits() {

int intHealthInitial = 0;


//end attempt
switch (strCharacterClass) {
case "Sorcerer":
case "Wizard":
intHealthInitial = 6; // Sorcerer and Wizard's initial health is 6
break;
case "Bard":
case "Cleric":
case "Druid":
case "Monk":
case "Rogue":
case "Warlock":
intHealthInitial = 8; // Bard, Cleric, Druid, Monk, Rogue, and Warlock's initial health is 8
break;
case "Fighter":
case "Paladin":
case "Ranger":
intHealthInitial = 10; // Fighter, Paladin, and Ranger's initial health is 10
break;
case "Barbarian":
intHealthInitial = 12; // Barbarian's initial health is 12
break;
}

//Attempt to create spellbook for magical classes'

Set<String> setMagical;
setMagical = new HashSet<String>(Arrays.asList("Bard", "Cleric", "Druid", "Paladin",
"Ranger", "Sorcerer", "Warlock", "Wizard"));

if(setMagical.contains(strCharacterClass)){
magical = true;
invalidateOptionsMenu();
}

intTotalHP = intHealthInitial + intConstitutionMod; // Starting HP is initial health + constitution modifier
intRemainingHP = intTotalHP; // Sets character at full health
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_drawer, menu);

menu.findItem(R.id.nav_spellbook).setVisible(magical);

return super.onPrepareOptionsMenu(menu);
}

这是java中的尝试2,在Profile Activity 类中,因为这个类是在指定字符类之后调用的,并且这个函数是在第一次设置菜单时:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_drawer, menu);
Set<String> setMagical;
setMagical = new HashSet<String>(Arrays.asList("Bard", "Cleric", "Druid", "Paladin",
"Ranger", "Sorcerer", "Warlock", "Wizard"));
MenuItem spellbook = menu.findItem(R.id.nav_spellbook);

if(setMagical.contains(characterClass))
{

spellbook.setVisible(true);
}
else
{
spellbook.setVisible(false);
}

return true;
}

这里是 github 上的项目,如果有人想看一下完整的代码 https://github.com/Doszust/RPG-Character-Sheet/tree/master/app/src/main/java/com/ucfknights/dylan_oszust/dungeonsanddragons

最佳答案

您的第一次尝试就走在了正确的轨道上。您可以使用 invalidateOptionsMenu() 触发对 onPrepareOptionsMenu() 的调用,在其中实现对菜单的更改。

您需要从 onPrepareOptionsMenu() 返回 true 才能显示它。

也不要在 onPrepareOptionsMenu() 中再次膨胀菜单。方法参数中已向您提供了菜单

@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main_drawer, menu);

return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

menu.findItem(R.id.nav_spellbook).setVisible(magical);

return true;
}

您的菜单文件应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_profile"
android:title="Profile"
android:visible="true"/>
<item
android:id="@+id/nav_battle"
android:title="Battle"
android:visible="true"/>
<item
android:id="@+id/nav_items"
android:title="Items"
android:visible="true"/>
<item
android:id="@+id/nav_spellbook"
android:title="Spell Book"
android:visible="false"/>
</group>
</menu>

因此,onCreateOptionsMenu() 是您首先创建菜单的位置。然后 onPrepareOptionsMenu() 就是您可以从那时起修改它的地方。

关于java - 根据用户输入设置菜单项android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819741/

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