尝试在加载器中设置菜单项图标时出现空指针异常



我设置了一个加载器,我尝试在其中设置onLoadDone()方法的操作栏中的项目图标,但是在尝试这样做时出现空指针异常。

但是,如果我不尝试在onLoadDone()方法中执行此操作,则可以更改图标。

ActionMenuItemView actionBarMenuItem = (ActionMenuItemView) findViewById(R.id.action_item);
actionBarMenuItem.setIcon(getResources().getDrawable(R.drawable.ic_my_icon));
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.internal.view.menu.ActionMenuItemView.setIcon(android.graphics.drawable.Drawable)' on a null object reference

有没有人遇到过这个问题,或者能够知道为什么会发生?

不能在 onCreate 中的菜单项上使用findViewById(),因为菜单布局未膨胀。您可以创建一个全局 Menu 变量并在 onCreateOptionsMenu() 中初始化它,然后在您的 onLoadFinished() 中使用它。

private Menu menu;

在你的onCreateOptionsMenu()

this.menu = menu;

在你的 onLoadDone() 方法中

menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.ic_launcher));

我遇到了同样的问题,这让我发疯了。简而言之,不能保证(取决于 API 版本)菜单(及其项目)将由 OnCreate 加载,这就是您获得 NPE 的原因。

我通过将更改的所有逻辑放在onCreateOptionsMenu部分内的菜单中来解决它。 例如:

if (clientcount >=2)
{
    menuOnline.setIcon(getResources().getDrawable(R.drawable.online));
}
else {
    menuOnline.setIcon(getResources().getDrawable(R.drawable.offline));
}

设置客户端计数后,我调用了无效选项菜单,从而确保菜单正确加载。这为我解决了这个问题。

我以这种方式绕过了它。也许它是歪的,但它似乎有效:

 public void syncStatus(final String input){
    if (mMenu == null){
        //wait 1 sec
        new CountDownTimer(1000, 1000) {
            public void onTick(long millisUntilFinished) {
            }
            public void onFinish() {
                //retry method
                syncStatus(input);
            }
        }.start();
        return;
    }
    mMenu.getItem(0).setIcon(ContextCompat.getDrawable(this, R.drawable.sync_off));
    }

最新更新