我目前正在尝试通过编程方式从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);
}
}
}
});
}
答案 0 :(得分:0)
如果您有3个菜单项:
menu.getItem(0); // 1 item
menu.getItem(1); // 2 item
menu.getItem(2); // 3 item