首页 > 解决方案 > 如何在主方法中以编程方式替换当前工具栏菜单项图标

问题描述

我目前正在尝试从 onCreate() 以编程方式更改工具栏上的菜单项图标。我将我的工具栏对象从 onCreate() 传递给我在启动时运行的方法。如果从 Firebase 查询中找到记录,我想更改为新的可绘制图标。

我的工具栏菜单共有 3 个项目:一个搜索栏和两个菜单项这是我的堆栈跟踪错误:

java.lang.IndexOutOfBoundsException: Index: 2131362144, Size: 3
    at java.util.ArrayList.get(ArrayList.java:411)
    at android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:758)
    at com.google.android.gms.tasks.zzj.run(Unknown Source)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6077)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)

我以前从未在应用程序中这样做过,所以我不确定使用哪些方法来替换图标。这是我到目前为止所尝试的。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    getAllNotifications(toolbar);
}


private void getAllNotifications(Toolbar toolbar){

    db.collection("Users_Profile_Information")
    .document(userID)
    .collection("All_Messages")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if(task.isSuccessful()){
                        if(task.getResult() != null){
                            toolbar.getMenu().getItem(R.id.notifications).setIcon(R.drawable.notification_two);
                        }



                    }
                }
            });
}

标签: android

解决方案


如果您有 3 个菜单项:

menu.getItem(0); // 1 item
menu.getItem(1); // 2 item
menu.getItem(2); // 3 item

Android 文档链接。


推荐阅读