gpt4 book ai didi

java - 如何调用 public boolean onPrepareOptionsMenu(Menu menu)

转载 作者:行者123 更新时间:2023-12-01 11:16:54 27 4
gpt4 key购买 nike

我正在使用 Java 和 Android Studio。我需要更改操作栏上的图像。我需要做的是根据从远程传感器接收到的读数来更改在操作栏上显示的图像。因此,我无法使用可点击的方法,而是使用一些代码在从传感器接收到数据时激活。然后代码分析数据并决定显示几幅图像中的哪一幅。然后程序需要更新操作栏图像。这是我需要你帮助的部分。我想我应该使用 onPrepareOptionsMenu 来更新图像。但是,我似乎无法正确调用 onPrepareOptionsMenu 的代码。特别是,onPrepareOptions 使用参数(Menu 菜单)。我似乎无法正确指定第二个菜单,因为它总是给出错误。下面的代码给出:“需要 android.view.Menu 找到 int”。如果我用 null 初始化菜单,则会出现空引用错误。有什么建议如何纠正我的代码或者做一些完全不同的事情来更新图像?谢谢。下面是我的java代码。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

menu.clear(); // Clear the menu first

Log.d(TAG, " Before inflation");
getMenuInflater().inflate(R.menu.gatt_services, menu);
Log.d(TAG, "Before the findItem");
menu.findItem(R.id.menu_batlevel).setIcon(R.drawable.low25);

return super.onPrepareOptionsMenu(menu);
}

调用 onPrepareOptionsMenu 的代码:

            ...
else if (dataType == 2.0) {
Menu menu = (R.menu.gatt_services);
getMenuInflater().inflate(R.menu.gatt_services, menu);
onPrepareOptionsMenu(Menu menu);
...

操作栏的 XML 代码。我试图更改的图像是 item id/menu_batlevel:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:checkable="false"
android:orderInCategory="1"
android:showAsAction="ifRoom"/>
<item android:id="@+id/menu_batlevel"
android:checkable="false"
android:icon="@drawable/discharged"
android:title="BatLev"
android:orderInCategory="2"
android:showAsAction="ifRoom"/>
<item android:id="@+id/menu_connect"
android:title="@string/menu_connect"
android:orderInCategory="100"
android:showAsAction="ifRoom|withText"/>
<item android:id="@+id/menu_disconnect"
android:title="@string/menu_disconnect"
android:orderInCategory="101"
android:showAsAction="ifRoom|withText"/>
</menu>
<小时/>

我的解决方案如下所示。我将更新图像的 if 语句放入 onCreateOptionsMenu 中:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.d(TAG, "onCreateOptions Before inflation");
getMenuInflater().inflate(R.menu.gatt_services, menu);
...
if (dataType == 2.0){
if (bat_level < 10) {
MenuItem batItem = menu.findItem(R.id.menu_batlevel);
batItem.setIcon(R.drawable.discharged);
}
...

我添加了一个类:

class VersionHelper
{
static void refreshActionBarMenu(Activity activity)
{
activity.invalidateOptionsMenu();
}
}

我从我的程序中调用该类:

...
else if (dataType == 2.0) {
VersionHelper.refreshActionBarMenu(DeviceControlActivity.this);
...

上面的代码是有效的。如您所知,我是 java 新手,因此如果您发现此代码有问题或有更好的方法,请告诉我。

最佳答案

如果您想更改现有菜单项上的图像,可以在创建菜单项时保存对菜单项的引用,如下所示:

private MenuItem photoMenuItem;

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
inflater.inflate(R.menu.menu_end_details, menu);

// find the photo menu and save it
photoMenuItem = menu.findItem(R.id.photoMenuItem);
}

然后当需要更新菜单项时,只需调用 setIcon:

if (photoMenuItem != null)
{
photoMenuItem.setIcon(R.drawable.camera_active);
}

如果您想决定是否显示特定的菜单项,您可以在其存在可能改变的项目上调用 setVisible 而不是 setIcon 。

关于java - 如何调用 public boolean onPrepareOptionsMenu(Menu menu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31713976/

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