如何更改菜单图标onMessageReceived

时间:2018-10-08 10:32:35

标签: android firebase firebase-cloud-messaging

这是我设置工具栏(MainActivity)的方式。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

现在,我想在收到通知时将xml文件更改为main_notification_on。这就是我要实现的目标

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            if(there is no new notification)
             { 
                   getMenuInflater().inflate(R.menu.main, menu); }
            else{
                    getMenuInflater().inflate(R.menu.main_notification_on, menu);
                }
            return true;
        }

这是我的onMessageReceived的{​​{1}}

MyFirebaseMessagingService

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将InvalidateOptionsMenu()与OnPrepareOptionsMenu()一起使用。每当调用invalidateOptionsMenu()时,都会在回调中调用OnPrepareOptionsMenu()。在这里您可以更改菜单布局。代码如下所示:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
     String title = remoteMessage.getData().get("title");
     String message = remoteMessage.getData().get("body");
     showNotifications(title, message);

     //send a broadcast from here and catch it in MainActivity
}

现在MainActivity中广播接收器的OnReceive()中使用invalidateOptionsMenu():

@Override
OnReceive(){
invalidateOptionsMenu();
}

在MainActivity中重写OnPrepareOptionsMenu()方法,并在那里更改布局。这些行上的内容:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main_notification_on, menu);
  return super.onPrepareOptionsMenu(menu);
}