目前我正在尝试从我的Firebase数据中检索数据,然后我将用它来帮助在onCreate()方法中创建我的导航抽屉。
在我使用的Mike Penz Material Drawer library中,我可以选择为AccountHeader指定帐户信息,例如姓名和电子邮件,所以我试图尝试在创建导航抽屉之前,从我的Firebase数据库中的用户表中检索这些详细信息。
不幸的是,使用addValueEventListener()
或addListenerForSingleValueEvent()
并不能满足我的需要,因为变量(userEmail,userRole,userName)仅在创建导航抽屉后被赋值。
if(authData != null) {
firebase.child("users").child(authData.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot
Users user = snapshot.getValue(Users.class);
userEmail = authData.getProviderData().get("email").toString();
userRole = user.getRole();
if (user.getFirstName() != null && user.getLastName() != null) {
userName = user.getFirstName() + " " + user.getLastName();
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
System.out.println("The read failed: " + firebaseError.getMessage());
}
});
我已经在此addValueEventListener方法中记录了变量的值,并且在此方法之后,所以我知道变量正在检索值,但仅在创建导航抽屉之后而不是之前。
希望我已经为某人提供了足够的信息,以便能够帮助我解决这个问题,如果我还没有让我知道你在评论中需要什么。
答案 0 :(得分:2)
我假设您询问如何在创建后向Drawer
添加项目。即使在创建之后,也可以更新,删除和添加项目到Drawer
。有关详情,请点击此处https://github.com/mikepenz/MaterialDrawer#modify-items-or-the-drawer,
编辑:
AccountHeader header = new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.drawable.header)
.withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
@Override
public boolean onProfileChanged(View view, IProfile profile, boolean current) {
//Handle Profile changes
return false;
}
})
.build();
Drawer drawer = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar)
.withAccountHeader(header)
.addDrawerItems(
new DividerDrawerItem(),
new SecondaryDrawerItem().withName(R.string.drawer_item_settings),
new SecondaryDrawerItem().withName(R.string.drawer_item_about)
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
// Handle clicks
return true;
}
})
.build();
//Later
header.addProfile(new ProfileDrawerItem().withIcon(bitmap).withName(name).withEmail(email), 0);
这是如何运作的?