我在我的注册用户活动中有这段代码:
val userDataChange = Intent(BROADCAST_USER_DATA_CHANGE)
userDataChange.putExtra("aaa", "aaaaaaaa")
userDataChange.putExtra("bbb", 123)
LocalBroadcastManager.getInstance(this).sendBroadcast(userDataChange)
在主要活动中接收者:
LocalBroadcastManager.getInstance(this)
.registerReceiver(userDataChangeReceiver,
IntentFilter(BROADCAST_USER_DATA_CHANGE))
和userDatachangeReceiver函数:
private val userDataChangeReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("aaa", AuthService.isLoggedIn.toString())
userNameNavHeader.text = "BBBBBBBBBBB"
if (AuthService.isLoggedIn == true) {
userNameNavHeader.text = userDataService.name
userEmailNavHeader.text = userDataService.email
val resourceId = resources.getIdentifier(userDataService.avatarName, "drawable",
packageName)
userImageNavHeader.setImageResource(resourceId)
userImageNavHeader.setBackgroundColor(userDataService.returnAvatarColor(userDataService.avatarColor))
loginButtonNavHeader.text = "Logout"
}
}
}
create user activity更新userDataService就好了,当我记录它时,我得到了正确的参数。 AuthService.isLoggedIn返回true但抽屉UI未更新 我已经尝试将它放在onStart中,onResume取消注册onPause但没有运气,当我尝试访问意图内的包时我得到null。 我把它放在那里只是为了看它是否真的得到了thrugh 任何想法?
答案 0 :(得分:1)
首先您需要首先获取对nav_header_main布局的引用,以便能够更新nav_header_main中的text-view和image-view。而不是直接使用元素的ID,您应该使用nav_header引用,然后使用ID
private val userDataChangeReceiver = object: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if(AuthService.isLoggedIn){
Log.d("qwe", UserDataService.name)
Log.d("qwe", UserDataService.email)
Log.d("qwe", UserDataService.avatarName)
Log.d("qwe", "Made it inside the broadcast bro")
Log.d("qwe", "Wrap")
nav_drawer_header_include.userEmailNavHeader.text = UserDataService.email
nav_drawer_header_include.userNameNavHeader.text = UserDataService.name
userEmailNavHeader.text = UserDataService.email
val resourseid= resources.getIdentifier(UserDataService.avatarName,"drawable",packageName)
nav_drawer_header_include.userImageNavHeader.setImageResource(resourseid)
nav_drawer_header_include.loginBtnNavHeader.text="Logout"
}
}
}
我们应该最常使用Log,它可以帮助我直接解决问题,而不是将时间浪费在完美的工作上。
在进行Android Kotlin课程时,我也偶然发现了这个问题,但是经过搜索,我发现很多人都遇到了这个问题,他们在不同的平台上提出了问题,但没有提供答案。但是在搜索了相同的术语“ UI元素未更新android”之后,在Java中发现了一些堆栈溢出答案。如何在导航抽屉标题中更改TextView的文本?
他们都解释说首先要获得参考,然后我们才能更新View。然后我尝试了,幸运的是,它工作得很好。
PS:这是我的第一个回答,对不起,我深表歉意。
答案 1 :(得分:0)
我们无法看到您的整个代码,但也许您不在UI-Thread上?
您只能从主线程更新UI,您可以使用日志或调试来查看您要测试该理论的线程,或者只是将您的代码包装在runOnUiThread中(这将需要活动上下文)
另外,如果您想挖掘,这里有一个有趣的读物: Understanding Activity.runOnUiThread